// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: protobuf/ic3_data.proto

package soot.jimple.infoflow.android.iccta;

@SuppressWarnings("unused")
public final class Ic3Data {
	private Ic3Data() {
	}

	public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) {
	}

	/**
	 * Protobuf enum {@code edu.psu.cse.siis.ic3.AttributeKind}
	 */
	public enum AttributeKind implements com.google.protobuf.ProtocolMessageEnum {
		/**
		 * <code>ACTION = 0;</code>
		 */
		ACTION(0, 0),
		/**
		 * <code>CATEGORY = 1;</code>
		 */
		CATEGORY(1, 1),
		/**
		 * <code>PACKAGE = 2;</code>
		 */
		PACKAGE(2, 2),
		/**
		 * <code>CLASS = 3;</code>
		 */
		CLASS(3, 3),
		/**
		 * <code>TYPE = 4;</code>
		 */
		TYPE(4, 4),
		/**
		 * <code>URI = 5;</code>
		 */
		URI(5, 5),
		/**
		 * <code>SCHEME = 6;</code>
		 */
		SCHEME(6, 6),
		/**
		 * <code>EXTRA = 7;</code>
		 */
		EXTRA(7, 7),
		/**
		 * <code>AUTHORITY = 8;</code>
		 */
		AUTHORITY(8, 8),
		/**
		 * <code>HOST = 9;</code>
		 */
		HOST(9, 9),
		/**
		 * <code>PATH = 10;</code>
		 */
		PATH(10, 10),
		/**
		 * <code>PORT = 11;</code>
		 */
		PORT(11, 11),
		/**
		 * <code>SSP = 12;</code>
		 */
		SSP(12, 12),
		/**
		 * <code>QUERY = 13;</code>
		 */
		QUERY(13, 13),
		/**
		 * <code>FLAG = 14;</code>
		 */
		FLAG(14, 14),
		/**
		 * <code>PRIORITY = 15;</code>
		 */
		PRIORITY(15, 15),;

		/**
		 * <code>ACTION = 0;</code>
		 */
		public static final int ACTION_VALUE = 0;
		/**
		 * <code>CATEGORY = 1;</code>
		 */
		public static final int CATEGORY_VALUE = 1;
		/**
		 * <code>PACKAGE = 2;</code>
		 */
		public static final int PACKAGE_VALUE = 2;
		/**
		 * <code>CLASS = 3;</code>
		 */
		public static final int CLASS_VALUE = 3;
		/**
		 * <code>TYPE = 4;</code>
		 */
		public static final int TYPE_VALUE = 4;
		/**
		 * <code>URI = 5;</code>
		 */
		public static final int URI_VALUE = 5;
		/**
		 * <code>SCHEME = 6;</code>
		 */
		public static final int SCHEME_VALUE = 6;
		/**
		 * <code>EXTRA = 7;</code>
		 */
		public static final int EXTRA_VALUE = 7;
		/**
		 * <code>AUTHORITY = 8;</code>
		 */
		public static final int AUTHORITY_VALUE = 8;
		/**
		 * <code>HOST = 9;</code>
		 */
		public static final int HOST_VALUE = 9;
		/**
		 * <code>PATH = 10;</code>
		 */
		public static final int PATH_VALUE = 10;
		/**
		 * <code>PORT = 11;</code>
		 */
		public static final int PORT_VALUE = 11;
		/**
		 * <code>SSP = 12;</code>
		 */
		public static final int SSP_VALUE = 12;
		/**
		 * <code>QUERY = 13;</code>
		 */
		public static final int QUERY_VALUE = 13;
		/**
		 * <code>FLAG = 14;</code>
		 */
		public static final int FLAG_VALUE = 14;
		/**
		 * <code>PRIORITY = 15;</code>
		 */
		public static final int PRIORITY_VALUE = 15;

		@Override
		public final int getNumber() {
			return value;
		}

		public static AttributeKind valueOf(int value) {
			switch (value) {
			case 0:
				return ACTION;
			case 1:
				return CATEGORY;
			case 2:
				return PACKAGE;
			case 3:
				return CLASS;
			case 4:
				return TYPE;
			case 5:
				return URI;
			case 6:
				return SCHEME;
			case 7:
				return EXTRA;
			case 8:
				return AUTHORITY;
			case 9:
				return HOST;
			case 10:
				return PATH;
			case 11:
				return PORT;
			case 12:
				return SSP;
			case 13:
				return QUERY;
			case 14:
				return FLAG;
			case 15:
				return PRIORITY;
			default:
				return null;
			}
		}

		public static com.google.protobuf.Internal.EnumLiteMap<AttributeKind> internalGetValueMap() {
			return internalValueMap;
		}

		private static com.google.protobuf.Internal.EnumLiteMap<AttributeKind> internalValueMap = new com.google.protobuf.Internal.EnumLiteMap<AttributeKind>() {
			@Override
			public AttributeKind findValueByNumber(int number) {
				return AttributeKind.valueOf(number);
			}
		};

		@Override
		public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
			return getDescriptor().getValues().get(index);
		}

		@Override
		public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
			return getDescriptor();
		}

		public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
			return Ic3Data.getDescriptor().getEnumTypes().get(0);
		}

		private static final AttributeKind[] VALUES = values();

		public static AttributeKind valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
			if (desc.getType() != getDescriptor()) {
				throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type.");
			}
			return VALUES[desc.getIndex()];
		}

		private final int index;
		private final int value;

		private AttributeKind(int index, int value) {
			this.index = index;
			this.value = value;
		}

		// @@protoc_insertion_point(enum_scope:edu.psu.cse.siis.ic3.AttributeKind)
	}

	public interface AttributeOrBuilder extends com.google.protobuf.MessageOrBuilder {

		// optional .edu.psu.cse.siis.ic3.AttributeKind kind = 1;
		/**
		 * <code>optional .edu.psu.cse.siis.ic3.AttributeKind kind = 1;</code>
		 */
		boolean hasKind();

		/**
		 * <code>optional .edu.psu.cse.siis.ic3.AttributeKind kind = 1;</code>
		 */
		Ic3Data.AttributeKind getKind();

		// repeated string value = 2;
		/**
		 * <code>repeated string value = 2;</code>
		 */
		java.util.List<java.lang.String> getValueList();

		/**
		 * <code>repeated string value = 2;</code>
		 */
		int getValueCount();

		/**
		 * <code>repeated string value = 2;</code>
		 */
		java.lang.String getValue(int index);

		/**
		 * <code>repeated string value = 2;</code>
		 */
		com.google.protobuf.ByteString getValueBytes(int index);

		// repeated int32 int_value = 3;
		/**
		 * <code>repeated int32 int_value = 3;</code>
		 */
		java.util.List<java.lang.Integer> getIntValueList();

		/**
		 * <code>repeated int32 int_value = 3;</code>
		 */
		int getIntValueCount();

		/**
		 * <code>repeated int32 int_value = 3;</code>
		 */
		int getIntValue(int index);
	}

	/**
	 * Protobuf type {@code edu.psu.cse.siis.ic3.Attribute}
	 */
	public static final class Attribute extends com.google.protobuf.GeneratedMessage implements AttributeOrBuilder {
		// Use Attribute.newBuilder() to construct.
		private Attribute(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
			super(builder);
			this.unknownFields = builder.getUnknownFields();
		}

		private Attribute(boolean noInit) {
			this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance();
		}

		private static final Attribute defaultInstance;

		public static Attribute getDefaultInstance() {
			return defaultInstance;
		}

		@Override
		public Attribute getDefaultInstanceForType() {
			return defaultInstance;
		}

		private final com.google.protobuf.UnknownFieldSet unknownFields;

		@java.lang.Override
		public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
			return this.unknownFields;
		}

		private Attribute(com.google.protobuf.CodedInputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry)
				throws com.google.protobuf.InvalidProtocolBufferException {
			initFields();
			int mutable_bitField0_ = 0;
			com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet
					.newBuilder();
			try {
				boolean done = false;
				while (!done) {
					int tag = input.readTag();
					switch (tag) {
					case 0:
						done = true;
						break;
					default: {
						if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
							done = true;
						}
						break;
					}
					case 8: {
						int rawValue = input.readEnum();
						Ic3Data.AttributeKind value = Ic3Data.AttributeKind.valueOf(rawValue);
						if (value == null) {
							unknownFields.mergeVarintField(1, rawValue);
						} else {
							bitField0_ |= 0x00000001;
							kind_ = value;
						}
						break;
					}
					case 18: {
						if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
							value_ = new com.google.protobuf.LazyStringArrayList();
							mutable_bitField0_ |= 0x00000002;
						}
						value_.add(input.readBytes());
						break;
					}
					case 24: {
						if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
							intValue_ = new java.util.ArrayList<java.lang.Integer>();
							mutable_bitField0_ |= 0x00000004;
						}
						intValue_.add(input.readInt32());
						break;
					}
					case 26: {
						int length = input.readRawVarint32();
						int limit = input.pushLimit(length);
						if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) {
							intValue_ = new java.util.ArrayList<java.lang.Integer>();
							mutable_bitField0_ |= 0x00000004;
						}
						while (input.getBytesUntilLimit() > 0) {
							intValue_.add(input.readInt32());
						}
						input.popLimit(limit);
						break;
					}
					}
				}
			} catch (com.google.protobuf.InvalidProtocolBufferException e) {
				throw e.setUnfinishedMessage(this);
			} catch (java.io.IOException e) {
				throw new com.google.protobuf.InvalidProtocolBufferException(e.getMessage()).setUnfinishedMessage(this);
			} finally {
				if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
					value_ = new com.google.protobuf.UnmodifiableLazyStringList(value_);
				}
				if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
					intValue_ = java.util.Collections.unmodifiableList(intValue_);
				}
				this.unknownFields = unknownFields.build();
				makeExtensionsImmutable();
			}
		}

		public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
			return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Attribute_descriptor;
		}

		@Override
		protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
			return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Attribute_fieldAccessorTable
					.ensureFieldAccessorsInitialized(Ic3Data.Attribute.class, Ic3Data.Attribute.Builder.class);
		}

		public static com.google.protobuf.Parser<Attribute> PARSER = new com.google.protobuf.AbstractParser<Attribute>() {
			@Override
			public Attribute parsePartialFrom(com.google.protobuf.CodedInputStream input,
					com.google.protobuf.ExtensionRegistryLite extensionRegistry)
					throws com.google.protobuf.InvalidProtocolBufferException {
				return new Attribute(input, extensionRegistry);
			}
		};

		@java.lang.Override
		public com.google.protobuf.Parser<Attribute> getParserForType() {
			return PARSER;
		}

		private int bitField0_;
		// optional .edu.psu.cse.siis.ic3.AttributeKind kind = 1;
		public static final int KIND_FIELD_NUMBER = 1;
		private Ic3Data.AttributeKind kind_;

		/**
		 * <code>optional .edu.psu.cse.siis.ic3.AttributeKind kind = 1;</code>
		 */
		@Override
		public boolean hasKind() {
			return ((bitField0_ & 0x00000001) == 0x00000001);
		}

		/**
		 * <code>optional .edu.psu.cse.siis.ic3.AttributeKind kind = 1;</code>
		 */
		@Override
		public Ic3Data.AttributeKind getKind() {
			return kind_;
		}

		// repeated string value = 2;
		public static final int VALUE_FIELD_NUMBER = 2;
		private com.google.protobuf.LazyStringList value_;

		/**
		 * <code>repeated string value = 2;</code>
		 */
		@Override
		public java.util.List<java.lang.String> getValueList() {
			return value_;
		}

		/**
		 * <code>repeated string value = 2;</code>
		 */
		@Override
		public int getValueCount() {
			return value_.size();
		}

		/**
		 * <code>repeated string value = 2;</code>
		 */
		@Override
		public java.lang.String getValue(int index) {
			return value_.get(index);
		}

		/**
		 * <code>repeated string value = 2;</code>
		 */
		@Override
		public com.google.protobuf.ByteString getValueBytes(int index) {
			return value_.getByteString(index);
		}

		// repeated int32 int_value = 3;
		public static final int INT_VALUE_FIELD_NUMBER = 3;
		private java.util.List<java.lang.Integer> intValue_;

		/**
		 * <code>repeated int32 int_value = 3;</code>
		 */
		@Override
		public java.util.List<java.lang.Integer> getIntValueList() {
			return intValue_;
		}

		/**
		 * <code>repeated int32 int_value = 3;</code>
		 */
		@Override
		public int getIntValueCount() {
			return intValue_.size();
		}

		/**
		 * <code>repeated int32 int_value = 3;</code>
		 */
		@Override
		public int getIntValue(int index) {
			return intValue_.get(index);
		}

		private void initFields() {
			kind_ = Ic3Data.AttributeKind.ACTION;
			value_ = com.google.protobuf.LazyStringArrayList.EMPTY;
			intValue_ = java.util.Collections.emptyList();
		}

		private byte memoizedIsInitialized = -1;

		@Override
		public final boolean isInitialized() {
			byte isInitialized = memoizedIsInitialized;
			if (isInitialized != -1)
				return isInitialized == 1;

			memoizedIsInitialized = 1;
			return true;
		}

		@Override
		public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
			getSerializedSize();
			if (((bitField0_ & 0x00000001) == 0x00000001)) {
				output.writeEnum(1, kind_.getNumber());
			}
			for (int i = 0; i < value_.size(); i++) {
				output.writeBytes(2, value_.getByteString(i));
			}
			for (int i = 0; i < intValue_.size(); i++) {
				output.writeInt32(3, intValue_.get(i));
			}
			getUnknownFields().writeTo(output);
		}

		private int memoizedSerializedSize = -1;

		@Override
		public int getSerializedSize() {
			int size = memoizedSerializedSize;
			if (size != -1)
				return size;

			size = 0;
			if (((bitField0_ & 0x00000001) == 0x00000001)) {
				size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, kind_.getNumber());
			}
			{
				int dataSize = 0;
				for (int i = 0; i < value_.size(); i++) {
					dataSize += com.google.protobuf.CodedOutputStream.computeBytesSizeNoTag(value_.getByteString(i));
				}
				size += dataSize;
				size += 1 * getValueList().size();
			}
			{
				int dataSize = 0;
				for (int i = 0; i < intValue_.size(); i++) {
					dataSize += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(intValue_.get(i));
				}
				size += dataSize;
				size += 1 * getIntValueList().size();
			}
			size += getUnknownFields().getSerializedSize();
			memoizedSerializedSize = size;
			return size;
		}

		private static final long serialVersionUID = 0L;

		@java.lang.Override
		protected java.lang.Object writeReplace() throws java.io.ObjectStreamException {
			return super.writeReplace();
		}

		public static Ic3Data.Attribute parseFrom(com.google.protobuf.ByteString data)
				throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static Ic3Data.Attribute parseFrom(com.google.protobuf.ByteString data,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry)
				throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static Ic3Data.Attribute parseFrom(byte[] data)
				throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static Ic3Data.Attribute parseFrom(byte[] data,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry)
				throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static Ic3Data.Attribute parseFrom(java.io.InputStream input) throws java.io.IOException {
			return PARSER.parseFrom(input);
		}

		public static Ic3Data.Attribute parseFrom(java.io.InputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
			return PARSER.parseFrom(input, extensionRegistry);
		}

		public static Ic3Data.Attribute parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
			return PARSER.parseDelimitedFrom(input);
		}

		public static Ic3Data.Attribute parseDelimitedFrom(java.io.InputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
			return PARSER.parseDelimitedFrom(input, extensionRegistry);
		}

		public static Ic3Data.Attribute parseFrom(com.google.protobuf.CodedInputStream input)
				throws java.io.IOException {
			return PARSER.parseFrom(input);
		}

		public static Ic3Data.Attribute parseFrom(com.google.protobuf.CodedInputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
			return PARSER.parseFrom(input, extensionRegistry);
		}

		public static Builder newBuilder() {
			return Builder.create();
		}

		@Override
		public Builder newBuilderForType() {
			return newBuilder();
		}

		public static Builder newBuilder(Ic3Data.Attribute prototype) {
			return newBuilder().mergeFrom(prototype);
		}

		@Override
		public Builder toBuilder() {
			return newBuilder(this);
		}

		@java.lang.Override
		protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
			Builder builder = new Builder(parent);
			return builder;
		}

		/**
		 * Protobuf type {@code edu.psu.cse.siis.ic3.Attribute}
		 */
		public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder>
				implements Ic3Data.AttributeOrBuilder {
			public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
				return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Attribute_descriptor;
			}

			@Override
			protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
				return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Attribute_fieldAccessorTable
						.ensureFieldAccessorsInitialized(Ic3Data.Attribute.class, Ic3Data.Attribute.Builder.class);
			}

			// Construct using Ic3Data.Attribute.newBuilder()
			private Builder() {
				maybeForceBuilderInitialization();
			}

			private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
				super(parent);
				maybeForceBuilderInitialization();
			}

			private void maybeForceBuilderInitialization() {
				if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
				}
			}

			private static Builder create() {
				return new Builder();
			}

			@Override
			public Builder clear() {
				super.clear();
				kind_ = Ic3Data.AttributeKind.ACTION;
				bitField0_ = (bitField0_ & ~0x00000001);
				value_ = com.google.protobuf.LazyStringArrayList.EMPTY;
				bitField0_ = (bitField0_ & ~0x00000002);
				intValue_ = java.util.Collections.emptyList();
				bitField0_ = (bitField0_ & ~0x00000004);
				return this;
			}

			@Override
			public Builder clone() {
				return create().mergeFrom(buildPartial());
			}

			@Override
			public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
				return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Attribute_descriptor;
			}

			@Override
			public Ic3Data.Attribute getDefaultInstanceForType() {
				return Ic3Data.Attribute.getDefaultInstance();
			}

			@Override
			public Ic3Data.Attribute build() {
				Ic3Data.Attribute result = buildPartial();
				if (!result.isInitialized()) {
					throw newUninitializedMessageException(result);
				}
				return result;
			}

			@Override
			public Ic3Data.Attribute buildPartial() {
				Ic3Data.Attribute result = new Ic3Data.Attribute(this);
				int from_bitField0_ = bitField0_;
				int to_bitField0_ = 0;
				if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
					to_bitField0_ |= 0x00000001;
				}
				result.kind_ = kind_;
				if (((bitField0_ & 0x00000002) == 0x00000002)) {
					value_ = new com.google.protobuf.UnmodifiableLazyStringList(value_);
					bitField0_ = (bitField0_ & ~0x00000002);
				}
				result.value_ = value_;
				if (((bitField0_ & 0x00000004) == 0x00000004)) {
					intValue_ = java.util.Collections.unmodifiableList(intValue_);
					bitField0_ = (bitField0_ & ~0x00000004);
				}
				result.intValue_ = intValue_;
				result.bitField0_ = to_bitField0_;
				onBuilt();
				return result;
			}

			@Override
			public Builder mergeFrom(com.google.protobuf.Message other) {
				if (other instanceof Ic3Data.Attribute) {
					return mergeFrom((Ic3Data.Attribute) other);
				} else {
					super.mergeFrom(other);
					return this;
				}
			}

			public Builder mergeFrom(Ic3Data.Attribute other) {
				if (other == Ic3Data.Attribute.getDefaultInstance())
					return this;
				if (other.hasKind()) {
					setKind(other.getKind());
				}
				if (!other.value_.isEmpty()) {
					if (value_.isEmpty()) {
						value_ = other.value_;
						bitField0_ = (bitField0_ & ~0x00000002);
					} else {
						ensureValueIsMutable();
						value_.addAll(other.value_);
					}
					onChanged();
				}
				if (!other.intValue_.isEmpty()) {
					if (intValue_.isEmpty()) {
						intValue_ = other.intValue_;
						bitField0_ = (bitField0_ & ~0x00000004);
					} else {
						ensureIntValueIsMutable();
						intValue_.addAll(other.intValue_);
					}
					onChanged();
				}
				this.mergeUnknownFields(other.getUnknownFields());
				return this;
			}

			@Override
			public final boolean isInitialized() {
				return true;
			}

			@Override
			public Builder mergeFrom(com.google.protobuf.CodedInputStream input,
					com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
				Ic3Data.Attribute parsedMessage = null;
				try {
					parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
				} catch (com.google.protobuf.InvalidProtocolBufferException e) {
					parsedMessage = (Ic3Data.Attribute) e.getUnfinishedMessage();
					throw e;
				} finally {
					if (parsedMessage != null) {
						mergeFrom(parsedMessage);
					}
				}
				return this;
			}

			private int bitField0_;

			// optional .edu.psu.cse.siis.ic3.AttributeKind kind = 1;
			private Ic3Data.AttributeKind kind_ = Ic3Data.AttributeKind.ACTION;

			/**
			 * <code>optional .edu.psu.cse.siis.ic3.AttributeKind kind = 1;</code>
			 */
			@Override
			public boolean hasKind() {
				return ((bitField0_ & 0x00000001) == 0x00000001);
			}

			/**
			 * <code>optional .edu.psu.cse.siis.ic3.AttributeKind kind = 1;</code>
			 */
			@Override
			public Ic3Data.AttributeKind getKind() {
				return kind_;
			}

			/**
			 * <code>optional .edu.psu.cse.siis.ic3.AttributeKind kind = 1;</code>
			 */
			public Builder setKind(Ic3Data.AttributeKind value) {
				if (value == null) {
					throw new NullPointerException();
				}
				bitField0_ |= 0x00000001;
				kind_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>optional .edu.psu.cse.siis.ic3.AttributeKind kind = 1;</code>
			 */
			public Builder clearKind() {
				bitField0_ = (bitField0_ & ~0x00000001);
				kind_ = Ic3Data.AttributeKind.ACTION;
				onChanged();
				return this;
			}

			// repeated string value = 2;
			private com.google.protobuf.LazyStringList value_ = com.google.protobuf.LazyStringArrayList.EMPTY;

			private void ensureValueIsMutable() {
				if (!((bitField0_ & 0x00000002) == 0x00000002)) {
					value_ = new com.google.protobuf.LazyStringArrayList(value_);
					bitField0_ |= 0x00000002;
				}
			}

			/**
			 * <code>repeated string value = 2;</code>
			 */
			@Override
			public java.util.List<java.lang.String> getValueList() {
				return java.util.Collections.unmodifiableList(value_);
			}

			/**
			 * <code>repeated string value = 2;</code>
			 */
			@Override
			public int getValueCount() {
				return value_.size();
			}

			/**
			 * <code>repeated string value = 2;</code>
			 */
			@Override
			public java.lang.String getValue(int index) {
				return value_.get(index);
			}

			/**
			 * <code>repeated string value = 2;</code>
			 */
			@Override
			public com.google.protobuf.ByteString getValueBytes(int index) {
				return value_.getByteString(index);
			}

			/**
			 * <code>repeated string value = 2;</code>
			 */
			public Builder setValue(int index, java.lang.String value) {
				if (value == null) {
					throw new NullPointerException();
				}
				ensureValueIsMutable();
				value_.set(index, value);
				onChanged();
				return this;
			}

			/**
			 * <code>repeated string value = 2;</code>
			 */
			public Builder addValue(java.lang.String value) {
				if (value == null) {
					throw new NullPointerException();
				}
				ensureValueIsMutable();
				value_.add(value);
				onChanged();
				return this;
			}

			/**
			 * <code>repeated string value = 2;</code>
			 */
			public Builder addAllValue(java.lang.Iterable<java.lang.String> values) {
				ensureValueIsMutable();
				super.addAll(values, value_);
				onChanged();
				return this;
			}

			/**
			 * <code>repeated string value = 2;</code>
			 */
			public Builder clearValue() {
				value_ = com.google.protobuf.LazyStringArrayList.EMPTY;
				bitField0_ = (bitField0_ & ~0x00000002);
				onChanged();
				return this;
			}

			/**
			 * <code>repeated string value = 2;</code>
			 */
			public Builder addValueBytes(com.google.protobuf.ByteString value) {
				if (value == null) {
					throw new NullPointerException();
				}
				ensureValueIsMutable();
				value_.add(value);
				onChanged();
				return this;
			}

			// repeated int32 int_value = 3;
			private java.util.List<java.lang.Integer> intValue_ = java.util.Collections.emptyList();

			private void ensureIntValueIsMutable() {
				if (!((bitField0_ & 0x00000004) == 0x00000004)) {
					intValue_ = new java.util.ArrayList<java.lang.Integer>(intValue_);
					bitField0_ |= 0x00000004;
				}
			}

			/**
			 * <code>repeated int32 int_value = 3;</code>
			 */
			@Override
			public java.util.List<java.lang.Integer> getIntValueList() {
				return java.util.Collections.unmodifiableList(intValue_);
			}

			/**
			 * <code>repeated int32 int_value = 3;</code>
			 */
			@Override
			public int getIntValueCount() {
				return intValue_.size();
			}

			/**
			 * <code>repeated int32 int_value = 3;</code>
			 */
			@Override
			public int getIntValue(int index) {
				return intValue_.get(index);
			}

			/**
			 * <code>repeated int32 int_value = 3;</code>
			 */
			public Builder setIntValue(int index, int value) {
				ensureIntValueIsMutable();
				intValue_.set(index, value);
				onChanged();
				return this;
			}

			/**
			 * <code>repeated int32 int_value = 3;</code>
			 */
			public Builder addIntValue(int value) {
				ensureIntValueIsMutable();
				intValue_.add(value);
				onChanged();
				return this;
			}

			/**
			 * <code>repeated int32 int_value = 3;</code>
			 */
			public Builder addAllIntValue(java.lang.Iterable<? extends java.lang.Integer> values) {
				ensureIntValueIsMutable();
				super.addAll(values, intValue_);
				onChanged();
				return this;
			}

			/**
			 * <code>repeated int32 int_value = 3;</code>
			 */
			public Builder clearIntValue() {
				intValue_ = java.util.Collections.emptyList();
				bitField0_ = (bitField0_ & ~0x00000004);
				onChanged();
				return this;
			}

			// @@protoc_insertion_point(builder_scope:edu.psu.cse.siis.ic3.Attribute)
		}

		static {
			defaultInstance = new Attribute(true);
			defaultInstance.initFields();
		}

		// @@protoc_insertion_point(class_scope:edu.psu.cse.siis.ic3.Attribute)
	}

	public interface ApplicationOrBuilder extends com.google.protobuf.MessageOrBuilder {

		// optional string name = 1;
		/**
		 * <code>optional string name = 1;</code>
		 */
		boolean hasName();

		/**
		 * <code>optional string name = 1;</code>
		 */
		java.lang.String getName();

		/**
		 * <code>optional string name = 1;</code>
		 */
		com.google.protobuf.ByteString getNameBytes();

		// optional uint32 version = 2;
		/**
		 * <code>optional uint32 version = 2;</code>
		 */
		boolean hasVersion();

		/**
		 * <code>optional uint32 version = 2;</code>
		 */
		int getVersion();

		// repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;
		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
		 */
		java.util.List<Ic3Data.Application.Permission> getPermissionsList();

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
		 */
		Ic3Data.Application.Permission getPermissions(int index);

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
		 */
		int getPermissionsCount();

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
		 */
		java.util.List<? extends Ic3Data.Application.PermissionOrBuilder> getPermissionsOrBuilderList();

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
		 */
		Ic3Data.Application.PermissionOrBuilder getPermissionsOrBuilder(int index);

		// repeated string used_permissions = 4;
		/**
		 * <code>repeated string used_permissions = 4;</code>
		 */
		java.util.List<java.lang.String> getUsedPermissionsList();

		/**
		 * <code>repeated string used_permissions = 4;</code>
		 */
		int getUsedPermissionsCount();

		/**
		 * <code>repeated string used_permissions = 4;</code>
		 */
		java.lang.String getUsedPermissions(int index);

		/**
		 * <code>repeated string used_permissions = 4;</code>
		 */
		com.google.protobuf.ByteString getUsedPermissionsBytes(int index);

		// repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;
		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
		 */
		java.util.List<Ic3Data.Application.Component> getComponentsList();

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
		 */
		Ic3Data.Application.Component getComponents(int index);

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
		 */
		int getComponentsCount();

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
		 */
		java.util.List<? extends Ic3Data.Application.ComponentOrBuilder> getComponentsOrBuilderList();

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
		 */
		Ic3Data.Application.ComponentOrBuilder getComponentsOrBuilder(int index);

		// optional int64 analysis_start = 6;
		/**
		 * <code>optional int64 analysis_start = 6;</code>
		 */
		boolean hasAnalysisStart();

		/**
		 * <code>optional int64 analysis_start = 6;</code>
		 */
		long getAnalysisStart();

		// optional int64 analysis_end = 7;
		/**
		 * <code>optional int64 analysis_end = 7;</code>
		 */
		boolean hasAnalysisEnd();

		/**
		 * <code>optional int64 analysis_end = 7;</code>
		 */
		long getAnalysisEnd();

		// optional string sample = 8;
		/**
		 * <code>optional string sample = 8;</code>
		 */
		boolean hasSample();

		/**
		 * <code>optional string sample = 8;</code>
		 */
		java.lang.String getSample();

		/**
		 * <code>optional string sample = 8;</code>
		 */
		com.google.protobuf.ByteString getSampleBytes();
	}

	/**
	 * Protobuf type {@code edu.psu.cse.siis.ic3.Application}
	 */
	public static final class Application extends com.google.protobuf.GeneratedMessage implements ApplicationOrBuilder {
		// Use Application.newBuilder() to construct.
		private Application(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
			super(builder);
			this.unknownFields = builder.getUnknownFields();
		}

		private Application(boolean noInit) {
			this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance();
		}

		private static final Application defaultInstance;

		public static Application getDefaultInstance() {
			return defaultInstance;
		}

		@Override
		public Application getDefaultInstanceForType() {
			return defaultInstance;
		}

		private final com.google.protobuf.UnknownFieldSet unknownFields;

		@java.lang.Override
		public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
			return this.unknownFields;
		}

		private Application(com.google.protobuf.CodedInputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry)
				throws com.google.protobuf.InvalidProtocolBufferException {
			initFields();
			int mutable_bitField0_ = 0;
			com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet
					.newBuilder();
			try {
				boolean done = false;
				while (!done) {
					int tag = input.readTag();
					switch (tag) {
					case 0:
						done = true;
						break;
					default: {
						if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
							done = true;
						}
						break;
					}
					case 10: {
						bitField0_ |= 0x00000001;
						name_ = input.readBytes();
						break;
					}
					case 16: {
						bitField0_ |= 0x00000002;
						version_ = input.readUInt32();
						break;
					}
					case 26: {
						if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
							permissions_ = new java.util.ArrayList<Ic3Data.Application.Permission>();
							mutable_bitField0_ |= 0x00000004;
						}
						permissions_.add(input.readMessage(Ic3Data.Application.Permission.PARSER, extensionRegistry));
						break;
					}
					case 34: {
						if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
							usedPermissions_ = new com.google.protobuf.LazyStringArrayList();
							mutable_bitField0_ |= 0x00000008;
						}
						usedPermissions_.add(input.readBytes());
						break;
					}
					case 42: {
						if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
							components_ = new java.util.ArrayList<Ic3Data.Application.Component>();
							mutable_bitField0_ |= 0x00000010;
						}
						components_.add(input.readMessage(Ic3Data.Application.Component.PARSER, extensionRegistry));
						break;
					}
					case 48: {
						bitField0_ |= 0x00000004;
						analysisStart_ = input.readInt64();
						break;
					}
					case 56: {
						bitField0_ |= 0x00000008;
						analysisEnd_ = input.readInt64();
						break;
					}
					case 66: {
						bitField0_ |= 0x00000010;
						sample_ = input.readBytes();
						break;
					}
					}
				}
			} catch (com.google.protobuf.InvalidProtocolBufferException e) {
				throw e.setUnfinishedMessage(this);
			} catch (java.io.IOException e) {
				throw new com.google.protobuf.InvalidProtocolBufferException(e.getMessage()).setUnfinishedMessage(this);
			} finally {
				if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
					permissions_ = java.util.Collections.unmodifiableList(permissions_);
				}
				if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
					usedPermissions_ = new com.google.protobuf.UnmodifiableLazyStringList(usedPermissions_);
				}
				if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
					components_ = java.util.Collections.unmodifiableList(components_);
				}
				this.unknownFields = unknownFields.build();
				makeExtensionsImmutable();
			}
		}

		public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
			return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_descriptor;
		}

		@Override
		protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
			return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_fieldAccessorTable
					.ensureFieldAccessorsInitialized(Ic3Data.Application.class, Ic3Data.Application.Builder.class);
		}

		public static com.google.protobuf.Parser<Application> PARSER = new com.google.protobuf.AbstractParser<Application>() {
			@Override
			public Application parsePartialFrom(com.google.protobuf.CodedInputStream input,
					com.google.protobuf.ExtensionRegistryLite extensionRegistry)
					throws com.google.protobuf.InvalidProtocolBufferException {
				return new Application(input, extensionRegistry);
			}
		};

		@java.lang.Override
		public com.google.protobuf.Parser<Application> getParserForType() {
			return PARSER;
		}

		public interface PermissionOrBuilder extends com.google.protobuf.MessageOrBuilder {

			// optional string name = 1;
			/**
			 * <code>optional string name = 1;</code>
			 */
			boolean hasName();

			/**
			 * <code>optional string name = 1;</code>
			 */
			java.lang.String getName();

			/**
			 * <code>optional string name = 1;</code>
			 */
			com.google.protobuf.ByteString getNameBytes();

			// optional .edu.psu.cse.siis.ic3.Application.Permission.Level level = 2;
			/**
			 * <code>optional .edu.psu.cse.siis.ic3.Application.Permission.Level level = 2;</code>
			 */
			boolean hasLevel();

			/**
			 * <code>optional .edu.psu.cse.siis.ic3.Application.Permission.Level level = 2;</code>
			 */
			Ic3Data.Application.Permission.Level getLevel();
		}

		/**
		 * Protobuf type {@code edu.psu.cse.siis.ic3.Application.Permission}
		 */
		public static final class Permission extends com.google.protobuf.GeneratedMessage
				implements PermissionOrBuilder {
			// Use Permission.newBuilder() to construct.
			private Permission(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
				super(builder);
				this.unknownFields = builder.getUnknownFields();
			}

			private Permission(boolean noInit) {
				this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance();
			}

			private static final Permission defaultInstance;

			public static Permission getDefaultInstance() {
				return defaultInstance;
			}

			@Override
			public Permission getDefaultInstanceForType() {
				return defaultInstance;
			}

			private final com.google.protobuf.UnknownFieldSet unknownFields;

			@java.lang.Override
			public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
				return this.unknownFields;
			}

			private Permission(com.google.protobuf.CodedInputStream input,
					com.google.protobuf.ExtensionRegistryLite extensionRegistry)
					throws com.google.protobuf.InvalidProtocolBufferException {
				initFields();
				int mutable_bitField0_ = 0;
				com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet
						.newBuilder();
				try {
					boolean done = false;
					while (!done) {
						int tag = input.readTag();
						switch (tag) {
						case 0:
							done = true;
							break;
						default: {
							if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
								done = true;
							}
							break;
						}
						case 10: {
							bitField0_ |= 0x00000001;
							name_ = input.readBytes();
							break;
						}
						case 16: {
							int rawValue = input.readEnum();
							Ic3Data.Application.Permission.Level value = Ic3Data.Application.Permission.Level
									.valueOf(rawValue);
							if (value == null) {
								unknownFields.mergeVarintField(2, rawValue);
							} else {
								bitField0_ |= 0x00000002;
								level_ = value;
							}
							break;
						}
						}
					}
				} catch (com.google.protobuf.InvalidProtocolBufferException e) {
					throw e.setUnfinishedMessage(this);
				} catch (java.io.IOException e) {
					throw new com.google.protobuf.InvalidProtocolBufferException(e.getMessage())
							.setUnfinishedMessage(this);
				} finally {
					this.unknownFields = unknownFields.build();
					makeExtensionsImmutable();
				}
			}

			public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
				return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Permission_descriptor;
			}

			@Override
			protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
				return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Permission_fieldAccessorTable
						.ensureFieldAccessorsInitialized(Ic3Data.Application.Permission.class,
								Ic3Data.Application.Permission.Builder.class);
			}

			public static com.google.protobuf.Parser<Permission> PARSER = new com.google.protobuf.AbstractParser<Permission>() {
				@Override
				public Permission parsePartialFrom(com.google.protobuf.CodedInputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return new Permission(input, extensionRegistry);
				}
			};

			@java.lang.Override
			public com.google.protobuf.Parser<Permission> getParserForType() {
				return PARSER;
			}

			/**
			 * Protobuf enum {@code edu.psu.cse.siis.ic3.Application.Permission.Level}
			 */
			public enum Level implements com.google.protobuf.ProtocolMessageEnum {
				/**
				 * <code>NORMAL = 0;</code>
				 */
				NORMAL(0, 0),
				/**
				 * <code>DANGEROUS = 1;</code>
				 */
				DANGEROUS(1, 1),
				/**
				 * <code>SIGNATURE = 2;</code>
				 */
				SIGNATURE(2, 2),
				/**
				 * <code>SIGNATURE_OR_SYSTEM = 3;</code>
				 */
				SIGNATURE_OR_SYSTEM(3, 3),;

				/**
				 * <code>NORMAL = 0;</code>
				 */
				public static final int NORMAL_VALUE = 0;
				/**
				 * <code>DANGEROUS = 1;</code>
				 */
				public static final int DANGEROUS_VALUE = 1;
				/**
				 * <code>SIGNATURE = 2;</code>
				 */
				public static final int SIGNATURE_VALUE = 2;
				/**
				 * <code>SIGNATURE_OR_SYSTEM = 3;</code>
				 */
				public static final int SIGNATURE_OR_SYSTEM_VALUE = 3;

				@Override
				public final int getNumber() {
					return value;
				}

				public static Level valueOf(int value) {
					switch (value) {
					case 0:
						return NORMAL;
					case 1:
						return DANGEROUS;
					case 2:
						return SIGNATURE;
					case 3:
						return SIGNATURE_OR_SYSTEM;
					default:
						return null;
					}
				}

				public static com.google.protobuf.Internal.EnumLiteMap<Level> internalGetValueMap() {
					return internalValueMap;
				}

				private static com.google.protobuf.Internal.EnumLiteMap<Level> internalValueMap = new com.google.protobuf.Internal.EnumLiteMap<Level>() {
					@Override
					public Level findValueByNumber(int number) {
						return Level.valueOf(number);
					}
				};

				@Override
				public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
					return getDescriptor().getValues().get(index);
				}

				@Override
				public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
					return getDescriptor();
				}

				public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
					return Ic3Data.Application.Permission.getDescriptor().getEnumTypes().get(0);
				}

				private static final Level[] VALUES = values();

				public static Level valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
					if (desc.getType() != getDescriptor()) {
						throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type.");
					}
					return VALUES[desc.getIndex()];
				}

				private final int index;
				private final int value;

				private Level(int index, int value) {
					this.index = index;
					this.value = value;
				}

				// @@protoc_insertion_point(enum_scope:edu.psu.cse.siis.ic3.Application.Permission.Level)
			}

			private int bitField0_;
			// optional string name = 1;
			public static final int NAME_FIELD_NUMBER = 1;
			private java.lang.Object name_;

			/**
			 * <code>optional string name = 1;</code>
			 */
			@Override
			public boolean hasName() {
				return ((bitField0_ & 0x00000001) == 0x00000001);
			}

			/**
			 * <code>optional string name = 1;</code>
			 */
			@Override
			public java.lang.String getName() {
				java.lang.Object ref = name_;
				if (ref instanceof java.lang.String) {
					return (java.lang.String) ref;
				} else {
					com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
					java.lang.String s = bs.toStringUtf8();
					if (bs.isValidUtf8()) {
						name_ = s;
					}
					return s;
				}
			}

			/**
			 * <code>optional string name = 1;</code>
			 */
			@Override
			public com.google.protobuf.ByteString getNameBytes() {
				java.lang.Object ref = name_;
				if (ref instanceof java.lang.String) {
					com.google.protobuf.ByteString b = com.google.protobuf.ByteString
							.copyFromUtf8((java.lang.String) ref);
					name_ = b;
					return b;
				} else {
					return (com.google.protobuf.ByteString) ref;
				}
			}

			// optional .edu.psu.cse.siis.ic3.Application.Permission.Level level = 2;
			public static final int LEVEL_FIELD_NUMBER = 2;
			private Ic3Data.Application.Permission.Level level_;

			/**
			 * <code>optional .edu.psu.cse.siis.ic3.Application.Permission.Level level = 2;</code>
			 */
			@Override
			public boolean hasLevel() {
				return ((bitField0_ & 0x00000002) == 0x00000002);
			}

			/**
			 * <code>optional .edu.psu.cse.siis.ic3.Application.Permission.Level level = 2;</code>
			 */
			@Override
			public Ic3Data.Application.Permission.Level getLevel() {
				return level_;
			}

			private void initFields() {
				name_ = "";
				level_ = Ic3Data.Application.Permission.Level.NORMAL;
			}

			private byte memoizedIsInitialized = -1;

			@Override
			public final boolean isInitialized() {
				byte isInitialized = memoizedIsInitialized;
				if (isInitialized != -1)
					return isInitialized == 1;

				memoizedIsInitialized = 1;
				return true;
			}

			@Override
			public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
				getSerializedSize();
				if (((bitField0_ & 0x00000001) == 0x00000001)) {
					output.writeBytes(1, getNameBytes());
				}
				if (((bitField0_ & 0x00000002) == 0x00000002)) {
					output.writeEnum(2, level_.getNumber());
				}
				getUnknownFields().writeTo(output);
			}

			private int memoizedSerializedSize = -1;

			@Override
			public int getSerializedSize() {
				int size = memoizedSerializedSize;
				if (size != -1)
					return size;

				size = 0;
				if (((bitField0_ & 0x00000001) == 0x00000001)) {
					size += com.google.protobuf.CodedOutputStream.computeBytesSize(1, getNameBytes());
				}
				if (((bitField0_ & 0x00000002) == 0x00000002)) {
					size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, level_.getNumber());
				}
				size += getUnknownFields().getSerializedSize();
				memoizedSerializedSize = size;
				return size;
			}

			private static final long serialVersionUID = 0L;

			@java.lang.Override
			protected java.lang.Object writeReplace() throws java.io.ObjectStreamException {
				return super.writeReplace();
			}

			public static Ic3Data.Application.Permission parseFrom(com.google.protobuf.ByteString data)
					throws com.google.protobuf.InvalidProtocolBufferException {
				return PARSER.parseFrom(data);
			}

			public static Ic3Data.Application.Permission parseFrom(com.google.protobuf.ByteString data,
					com.google.protobuf.ExtensionRegistryLite extensionRegistry)
					throws com.google.protobuf.InvalidProtocolBufferException {
				return PARSER.parseFrom(data, extensionRegistry);
			}

			public static Ic3Data.Application.Permission parseFrom(byte[] data)
					throws com.google.protobuf.InvalidProtocolBufferException {
				return PARSER.parseFrom(data);
			}

			public static Ic3Data.Application.Permission parseFrom(byte[] data,
					com.google.protobuf.ExtensionRegistryLite extensionRegistry)
					throws com.google.protobuf.InvalidProtocolBufferException {
				return PARSER.parseFrom(data, extensionRegistry);
			}

			public static Ic3Data.Application.Permission parseFrom(java.io.InputStream input)
					throws java.io.IOException {
				return PARSER.parseFrom(input);
			}

			public static Ic3Data.Application.Permission parseFrom(java.io.InputStream input,
					com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
				return PARSER.parseFrom(input, extensionRegistry);
			}

			public static Ic3Data.Application.Permission parseDelimitedFrom(java.io.InputStream input)
					throws java.io.IOException {
				return PARSER.parseDelimitedFrom(input);
			}

			public static Ic3Data.Application.Permission parseDelimitedFrom(java.io.InputStream input,
					com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
				return PARSER.parseDelimitedFrom(input, extensionRegistry);
			}

			public static Ic3Data.Application.Permission parseFrom(com.google.protobuf.CodedInputStream input)
					throws java.io.IOException {
				return PARSER.parseFrom(input);
			}

			public static Ic3Data.Application.Permission parseFrom(com.google.protobuf.CodedInputStream input,
					com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
				return PARSER.parseFrom(input, extensionRegistry);
			}

			public static Builder newBuilder() {
				return Builder.create();
			}

			@Override
			public Builder newBuilderForType() {
				return newBuilder();
			}

			public static Builder newBuilder(Ic3Data.Application.Permission prototype) {
				return newBuilder().mergeFrom(prototype);
			}

			@Override
			public Builder toBuilder() {
				return newBuilder(this);
			}

			@java.lang.Override
			protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
				Builder builder = new Builder(parent);
				return builder;
			}

			/**
			 * Protobuf type {@code edu.psu.cse.siis.ic3.Application.Permission}
			 */
			public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder>
					implements Ic3Data.Application.PermissionOrBuilder {
				public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
					return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Permission_descriptor;
				}

				@Override
				protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
					return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Permission_fieldAccessorTable
							.ensureFieldAccessorsInitialized(Ic3Data.Application.Permission.class,
									Ic3Data.Application.Permission.Builder.class);
				}

				// Construct using Ic3Data.Application.Permission.newBuilder()
				private Builder() {
					maybeForceBuilderInitialization();
				}

				private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
					super(parent);
					maybeForceBuilderInitialization();
				}

				private void maybeForceBuilderInitialization() {
					if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
					}
				}

				private static Builder create() {
					return new Builder();
				}

				@Override
				public Builder clear() {
					super.clear();
					name_ = "";
					bitField0_ = (bitField0_ & ~0x00000001);
					level_ = Ic3Data.Application.Permission.Level.NORMAL;
					bitField0_ = (bitField0_ & ~0x00000002);
					return this;
				}

				@Override
				public Builder clone() {
					return create().mergeFrom(buildPartial());
				}

				@Override
				public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
					return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Permission_descriptor;
				}

				@Override
				public Ic3Data.Application.Permission getDefaultInstanceForType() {
					return Ic3Data.Application.Permission.getDefaultInstance();
				}

				@Override
				public Ic3Data.Application.Permission build() {
					Ic3Data.Application.Permission result = buildPartial();
					if (!result.isInitialized()) {
						throw newUninitializedMessageException(result);
					}
					return result;
				}

				@Override
				public Ic3Data.Application.Permission buildPartial() {
					Ic3Data.Application.Permission result = new Ic3Data.Application.Permission(this);
					int from_bitField0_ = bitField0_;
					int to_bitField0_ = 0;
					if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
						to_bitField0_ |= 0x00000001;
					}
					result.name_ = name_;
					if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
						to_bitField0_ |= 0x00000002;
					}
					result.level_ = level_;
					result.bitField0_ = to_bitField0_;
					onBuilt();
					return result;
				}

				@Override
				public Builder mergeFrom(com.google.protobuf.Message other) {
					if (other instanceof Ic3Data.Application.Permission) {
						return mergeFrom((Ic3Data.Application.Permission) other);
					} else {
						super.mergeFrom(other);
						return this;
					}
				}

				public Builder mergeFrom(Ic3Data.Application.Permission other) {
					if (other == Ic3Data.Application.Permission.getDefaultInstance())
						return this;
					if (other.hasName()) {
						bitField0_ |= 0x00000001;
						name_ = other.name_;
						onChanged();
					}
					if (other.hasLevel()) {
						setLevel(other.getLevel());
					}
					this.mergeUnknownFields(other.getUnknownFields());
					return this;
				}

				@Override
				public final boolean isInitialized() {
					return true;
				}

				@Override
				public Builder mergeFrom(com.google.protobuf.CodedInputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
					Ic3Data.Application.Permission parsedMessage = null;
					try {
						parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
					} catch (com.google.protobuf.InvalidProtocolBufferException e) {
						parsedMessage = (Ic3Data.Application.Permission) e.getUnfinishedMessage();
						throw e;
					} finally {
						if (parsedMessage != null) {
							mergeFrom(parsedMessage);
						}
					}
					return this;
				}

				private int bitField0_;

				// optional string name = 1;
				private java.lang.Object name_ = "";

				/**
				 * <code>optional string name = 1;</code>
				 */
				@Override
				public boolean hasName() {
					return ((bitField0_ & 0x00000001) == 0x00000001);
				}

				/**
				 * <code>optional string name = 1;</code>
				 */
				@Override
				public java.lang.String getName() {
					java.lang.Object ref = name_;
					if (!(ref instanceof java.lang.String)) {
						java.lang.String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
						name_ = s;
						return s;
					} else {
						return (java.lang.String) ref;
					}
				}

				/**
				 * <code>optional string name = 1;</code>
				 */
				@Override
				public com.google.protobuf.ByteString getNameBytes() {
					java.lang.Object ref = name_;
					if (ref instanceof String) {
						com.google.protobuf.ByteString b = com.google.protobuf.ByteString
								.copyFromUtf8((java.lang.String) ref);
						name_ = b;
						return b;
					} else {
						return (com.google.protobuf.ByteString) ref;
					}
				}

				/**
				 * <code>optional string name = 1;</code>
				 */
				public Builder setName(java.lang.String value) {
					if (value == null) {
						throw new NullPointerException();
					}
					bitField0_ |= 0x00000001;
					name_ = value;
					onChanged();
					return this;
				}

				/**
				 * <code>optional string name = 1;</code>
				 */
				public Builder clearName() {
					bitField0_ = (bitField0_ & ~0x00000001);
					name_ = getDefaultInstance().getName();
					onChanged();
					return this;
				}

				/**
				 * <code>optional string name = 1;</code>
				 */
				public Builder setNameBytes(com.google.protobuf.ByteString value) {
					if (value == null) {
						throw new NullPointerException();
					}
					bitField0_ |= 0x00000001;
					name_ = value;
					onChanged();
					return this;
				}

				// optional .edu.psu.cse.siis.ic3.Application.Permission.Level level = 2;
				private Ic3Data.Application.Permission.Level level_ = Ic3Data.Application.Permission.Level.NORMAL;

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Permission.Level level = 2;</code>
				 */
				@Override
				public boolean hasLevel() {
					return ((bitField0_ & 0x00000002) == 0x00000002);
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Permission.Level level = 2;</code>
				 */
				@Override
				public Ic3Data.Application.Permission.Level getLevel() {
					return level_;
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Permission.Level level = 2;</code>
				 */
				public Builder setLevel(Ic3Data.Application.Permission.Level value) {
					if (value == null) {
						throw new NullPointerException();
					}
					bitField0_ |= 0x00000002;
					level_ = value;
					onChanged();
					return this;
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Permission.Level level = 2;</code>
				 */
				public Builder clearLevel() {
					bitField0_ = (bitField0_ & ~0x00000002);
					level_ = Ic3Data.Application.Permission.Level.NORMAL;
					onChanged();
					return this;
				}

				// @@protoc_insertion_point(builder_scope:edu.psu.cse.siis.ic3.Application.Permission)
			}

			static {
				defaultInstance = new Permission(true);
				defaultInstance.initFields();
			}

			// @@protoc_insertion_point(class_scope:edu.psu.cse.siis.ic3.Application.Permission)
		}

		public interface ComponentOrBuilder extends com.google.protobuf.MessageOrBuilder {

			// optional string name = 1;
			/**
			 * <code>optional string name = 1;</code>
			 */
			boolean hasName();

			/**
			 * <code>optional string name = 1;</code>
			 */
			java.lang.String getName();

			/**
			 * <code>optional string name = 1;</code>
			 */
			com.google.protobuf.ByteString getNameBytes();

			// optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;
			/**
			 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;</code>
			 */
			boolean hasKind();

			/**
			 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;</code>
			 */
			Ic3Data.Application.Component.ComponentKind getKind();

			// optional bool exported = 3;
			/**
			 * <code>optional bool exported = 3;</code>
			 */
			boolean hasExported();

			/**
			 * <code>optional bool exported = 3;</code>
			 */
			boolean getExported();

			// optional string permission = 4;
			/**
			 * <code>optional string permission = 4;</code>
			 */
			boolean hasPermission();

			/**
			 * <code>optional string permission = 4;</code>
			 */
			java.lang.String getPermission();

			/**
			 * <code>optional string permission = 4;</code>
			 */
			com.google.protobuf.ByteString getPermissionBytes();

			// optional uint32 missing = 5;
			/**
			 * <code>optional uint32 missing = 5;</code>
			 */
			boolean hasMissing();

			/**
			 * <code>optional uint32 missing = 5;</code>
			 */
			int getMissing();

			// repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;
			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
			 */
			java.util.List<Ic3Data.Application.Component.Extra> getExtrasList();

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
			 */
			Ic3Data.Application.Component.Extra getExtras(int index);

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
			 */
			int getExtrasCount();

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
			 */
			java.util.List<? extends Ic3Data.Application.Component.ExtraOrBuilder> getExtrasOrBuilderList();

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
			 */
			Ic3Data.Application.Component.ExtraOrBuilder getExtrasOrBuilder(int index);

			// optional string alias_target = 7;
			/**
			 * <code>optional string alias_target = 7;</code>
			 */
			boolean hasAliasTarget();

			/**
			 * <code>optional string alias_target = 7;</code>
			 */
			java.lang.String getAliasTarget();

			/**
			 * <code>optional string alias_target = 7;</code>
			 */
			com.google.protobuf.ByteString getAliasTargetBytes();

			// optional bool grant_uri_permissions = 8;
			/**
			 * <code>optional bool grant_uri_permissions = 8;</code>
			 */
			boolean hasGrantUriPermissions();

			/**
			 * <code>optional bool grant_uri_permissions = 8;</code>
			 */
			boolean getGrantUriPermissions();

			// optional string read_permission = 9;
			/**
			 * <code>optional string read_permission = 9;</code>
			 */
			boolean hasReadPermission();

			/**
			 * <code>optional string read_permission = 9;</code>
			 */
			java.lang.String getReadPermission();

			/**
			 * <code>optional string read_permission = 9;</code>
			 */
			com.google.protobuf.ByteString getReadPermissionBytes();

			// optional string write_permission = 10;
			/**
			 * <code>optional string write_permission = 10;</code>
			 */
			boolean hasWritePermission();

			/**
			 * <code>optional string write_permission = 10;</code>
			 */
			java.lang.String getWritePermission();

			/**
			 * <code>optional string write_permission = 10;</code>
			 */
			com.google.protobuf.ByteString getWritePermissionBytes();

			// repeated string authorities = 11;
			/**
			 * <code>repeated string authorities = 11;</code>
			 */
			java.util.List<java.lang.String> getAuthoritiesList();

			/**
			 * <code>repeated string authorities = 11;</code>
			 */
			int getAuthoritiesCount();

			/**
			 * <code>repeated string authorities = 11;</code>
			 */
			java.lang.String getAuthorities(int index);

			/**
			 * <code>repeated string authorities = 11;</code>
			 */
			com.google.protobuf.ByteString getAuthoritiesBytes(int index);

			// repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter
			// intent_filters = 12;
			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
			 */
			java.util.List<Ic3Data.Application.Component.IntentFilter> getIntentFiltersList();

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
			 */
			Ic3Data.Application.Component.IntentFilter getIntentFilters(int index);

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
			 */
			int getIntentFiltersCount();

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
			 */
			java.util.List<? extends Ic3Data.Application.Component.IntentFilterOrBuilder> getIntentFiltersOrBuilderList();

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
			 */
			Ic3Data.Application.Component.IntentFilterOrBuilder getIntentFiltersOrBuilder(int index);

			// repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points =
			// 13;
			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
			 */
			java.util.List<Ic3Data.Application.Component.ExitPoint> getExitPointsList();

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
			 */
			Ic3Data.Application.Component.ExitPoint getExitPoints(int index);

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
			 */
			int getExitPointsCount();

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
			 */
			java.util.List<? extends Ic3Data.Application.Component.ExitPointOrBuilder> getExitPointsOrBuilderList();

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
			 */
			Ic3Data.Application.Component.ExitPointOrBuilder getExitPointsOrBuilder(int index);

			// optional .edu.psu.cse.siis.ic3.Application.Component.Instruction
			// registration_instruction = 14;
			/**
			 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction registration_instruction = 14;</code>
			 */
			boolean hasRegistrationInstruction();

			/**
			 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction registration_instruction = 14;</code>
			 */
			Ic3Data.Application.Component.Instruction getRegistrationInstruction();

			/**
			 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction registration_instruction = 14;</code>
			 */
			Ic3Data.Application.Component.InstructionOrBuilder getRegistrationInstructionOrBuilder();
		}

		/**
		 * Protobuf type {@code edu.psu.cse.siis.ic3.Application.Component}
		 */
		public static final class Component extends com.google.protobuf.GeneratedMessage implements ComponentOrBuilder {
			// Use Component.newBuilder() to construct.
			private Component(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
				super(builder);
				this.unknownFields = builder.getUnknownFields();
			}

			private Component(boolean noInit) {
				this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance();
			}

			private static final Component defaultInstance;

			public static Component getDefaultInstance() {
				return defaultInstance;
			}

			@Override
			public Component getDefaultInstanceForType() {
				return defaultInstance;
			}

			private final com.google.protobuf.UnknownFieldSet unknownFields;

			@java.lang.Override
			public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
				return this.unknownFields;
			}

			private Component(com.google.protobuf.CodedInputStream input,
					com.google.protobuf.ExtensionRegistryLite extensionRegistry)
					throws com.google.protobuf.InvalidProtocolBufferException {
				initFields();
				int mutable_bitField0_ = 0;
				com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet
						.newBuilder();
				try {
					boolean done = false;
					while (!done) {
						int tag = input.readTag();
						switch (tag) {
						case 0:
							done = true;
							break;
						default: {
							if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
								done = true;
							}
							break;
						}
						case 10: {
							bitField0_ |= 0x00000001;
							name_ = input.readBytes();
							break;
						}
						case 16: {
							int rawValue = input.readEnum();
							Ic3Data.Application.Component.ComponentKind value = Ic3Data.Application.Component.ComponentKind
									.valueOf(rawValue);
							if (value == null) {
								unknownFields.mergeVarintField(2, rawValue);
							} else {
								bitField0_ |= 0x00000002;
								kind_ = value;
							}
							break;
						}
						case 24: {
							bitField0_ |= 0x00000004;
							exported_ = input.readBool();
							break;
						}
						case 34: {
							bitField0_ |= 0x00000008;
							permission_ = input.readBytes();
							break;
						}
						case 40: {
							bitField0_ |= 0x00000010;
							missing_ = input.readUInt32();
							break;
						}
						case 50: {
							if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
								extras_ = new java.util.ArrayList<Ic3Data.Application.Component.Extra>();
								mutable_bitField0_ |= 0x00000020;
							}
							extras_.add(
									input.readMessage(Ic3Data.Application.Component.Extra.PARSER, extensionRegistry));
							break;
						}
						case 58: {
							bitField0_ |= 0x00000020;
							aliasTarget_ = input.readBytes();
							break;
						}
						case 64: {
							bitField0_ |= 0x00000040;
							grantUriPermissions_ = input.readBool();
							break;
						}
						case 74: {
							bitField0_ |= 0x00000080;
							readPermission_ = input.readBytes();
							break;
						}
						case 82: {
							bitField0_ |= 0x00000100;
							writePermission_ = input.readBytes();
							break;
						}
						case 90: {
							if (!((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
								authorities_ = new com.google.protobuf.LazyStringArrayList();
								mutable_bitField0_ |= 0x00000400;
							}
							authorities_.add(input.readBytes());
							break;
						}
						case 98: {
							if (!((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
								intentFilters_ = new java.util.ArrayList<Ic3Data.Application.Component.IntentFilter>();
								mutable_bitField0_ |= 0x00000800;
							}
							intentFilters_.add(input.readMessage(Ic3Data.Application.Component.IntentFilter.PARSER,
									extensionRegistry));
							break;
						}
						case 106: {
							if (!((mutable_bitField0_ & 0x00001000) == 0x00001000)) {
								exitPoints_ = new java.util.ArrayList<Ic3Data.Application.Component.ExitPoint>();
								mutable_bitField0_ |= 0x00001000;
							}
							exitPoints_.add(input.readMessage(Ic3Data.Application.Component.ExitPoint.PARSER,
									extensionRegistry));
							break;
						}
						case 114: {
							Ic3Data.Application.Component.Instruction.Builder subBuilder = null;
							if (((bitField0_ & 0x00000200) == 0x00000200)) {
								subBuilder = registrationInstruction_.toBuilder();
							}
							registrationInstruction_ = input
									.readMessage(Ic3Data.Application.Component.Instruction.PARSER, extensionRegistry);
							if (subBuilder != null) {
								subBuilder.mergeFrom(registrationInstruction_);
								registrationInstruction_ = subBuilder.buildPartial();
							}
							bitField0_ |= 0x00000200;
							break;
						}
						}
					}
				} catch (com.google.protobuf.InvalidProtocolBufferException e) {
					throw e.setUnfinishedMessage(this);
				} catch (java.io.IOException e) {
					throw new com.google.protobuf.InvalidProtocolBufferException(e.getMessage())
							.setUnfinishedMessage(this);
				} finally {
					if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
						extras_ = java.util.Collections.unmodifiableList(extras_);
					}
					if (((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
						authorities_ = new com.google.protobuf.UnmodifiableLazyStringList(authorities_);
					}
					if (((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
						intentFilters_ = java.util.Collections.unmodifiableList(intentFilters_);
					}
					if (((mutable_bitField0_ & 0x00001000) == 0x00001000)) {
						exitPoints_ = java.util.Collections.unmodifiableList(exitPoints_);
					}
					this.unknownFields = unknownFields.build();
					makeExtensionsImmutable();
				}
			}

			public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
				return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_descriptor;
			}

			@Override
			protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
				return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_fieldAccessorTable
						.ensureFieldAccessorsInitialized(Ic3Data.Application.Component.class,
								Ic3Data.Application.Component.Builder.class);
			}

			public static com.google.protobuf.Parser<Component> PARSER = new com.google.protobuf.AbstractParser<Component>() {
				@Override
				public Component parsePartialFrom(com.google.protobuf.CodedInputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return new Component(input, extensionRegistry);
				}
			};

			@java.lang.Override
			public com.google.protobuf.Parser<Component> getParserForType() {
				return PARSER;
			}

			/**
			 * Protobuf enum
			 * {@code edu.psu.cse.siis.ic3.Application.Component.ComponentKind}
			 */
			public enum ComponentKind implements com.google.protobuf.ProtocolMessageEnum {
				/**
				 * <code>ACTIVITY = 0;</code>
				 */
				ACTIVITY(0, 0),
				/**
				 * <code>SERVICE = 1;</code>
				 */
				SERVICE(1, 1),
				/**
				 * <code>RECEIVER = 2;</code>
				 */
				RECEIVER(2, 2),
				/**
				 * <code>DYNAMIC_RECEIVER = 3;</code>
				 */
				DYNAMIC_RECEIVER(3, 3),
				/**
				 * <code>PROVIDER = 4;</code>
				 */
				PROVIDER(4, 4),;

				/**
				 * <code>ACTIVITY = 0;</code>
				 */
				public static final int ACTIVITY_VALUE = 0;
				/**
				 * <code>SERVICE = 1;</code>
				 */
				public static final int SERVICE_VALUE = 1;
				/**
				 * <code>RECEIVER = 2;</code>
				 */
				public static final int RECEIVER_VALUE = 2;
				/**
				 * <code>DYNAMIC_RECEIVER = 3;</code>
				 */
				public static final int DYNAMIC_RECEIVER_VALUE = 3;
				/**
				 * <code>PROVIDER = 4;</code>
				 */
				public static final int PROVIDER_VALUE = 4;

				@Override
				public final int getNumber() {
					return value;
				}

				public static ComponentKind valueOf(int value) {
					switch (value) {
					case 0:
						return ACTIVITY;
					case 1:
						return SERVICE;
					case 2:
						return RECEIVER;
					case 3:
						return DYNAMIC_RECEIVER;
					case 4:
						return PROVIDER;
					default:
						return null;
					}
				}

				public static com.google.protobuf.Internal.EnumLiteMap<ComponentKind> internalGetValueMap() {
					return internalValueMap;
				}

				private static com.google.protobuf.Internal.EnumLiteMap<ComponentKind> internalValueMap = new com.google.protobuf.Internal.EnumLiteMap<ComponentKind>() {
					@Override
					public ComponentKind findValueByNumber(int number) {
						return ComponentKind.valueOf(number);
					}
				};

				@Override
				public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
					return getDescriptor().getValues().get(index);
				}

				@Override
				public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
					return getDescriptor();
				}

				public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
					return Ic3Data.Application.Component.getDescriptor().getEnumTypes().get(0);
				}

				private static final ComponentKind[] VALUES = values();

				public static ComponentKind valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
					if (desc.getType() != getDescriptor()) {
						throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type.");
					}
					return VALUES[desc.getIndex()];
				}

				private final int index;
				private final int value;

				private ComponentKind(int index, int value) {
					this.index = index;
					this.value = value;
				}

				// @@protoc_insertion_point(enum_scope:edu.psu.cse.siis.ic3.Application.Component.ComponentKind)
			}

			public interface ExtraOrBuilder extends com.google.protobuf.MessageOrBuilder {

				// optional string extra = 1;
				/**
				 * <code>optional string extra = 1;</code>
				 */
				boolean hasExtra();

				/**
				 * <code>optional string extra = 1;</code>
				 */
				java.lang.String getExtra();

				/**
				 * <code>optional string extra = 1;</code>
				 */
				com.google.protobuf.ByteString getExtraBytes();

				// optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction
				// = 2;
				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 2;</code>
				 */
				boolean hasInstruction();

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 2;</code>
				 */
				Ic3Data.Application.Component.Instruction getInstruction();

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 2;</code>
				 */
				Ic3Data.Application.Component.InstructionOrBuilder getInstructionOrBuilder();
			}

			/**
			 * Protobuf type {@code edu.psu.cse.siis.ic3.Application.Component.Extra}
			 */
			public static final class Extra extends com.google.protobuf.GeneratedMessage implements ExtraOrBuilder {
				// Use Extra.newBuilder() to construct.
				private Extra(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
					super(builder);
					this.unknownFields = builder.getUnknownFields();
				}

				private Extra(boolean noInit) {
					this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance();
				}

				private static final Extra defaultInstance;

				public static Extra getDefaultInstance() {
					return defaultInstance;
				}

				@Override
				public Extra getDefaultInstanceForType() {
					return defaultInstance;
				}

				private final com.google.protobuf.UnknownFieldSet unknownFields;

				@java.lang.Override
				public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
					return this.unknownFields;
				}

				private Extra(com.google.protobuf.CodedInputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry)
						throws com.google.protobuf.InvalidProtocolBufferException {
					initFields();
					int mutable_bitField0_ = 0;
					com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet
							.newBuilder();
					try {
						boolean done = false;
						while (!done) {
							int tag = input.readTag();
							switch (tag) {
							case 0:
								done = true;
								break;
							default: {
								if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
									done = true;
								}
								break;
							}
							case 10: {
								bitField0_ |= 0x00000001;
								extra_ = input.readBytes();
								break;
							}
							case 18: {
								Ic3Data.Application.Component.Instruction.Builder subBuilder = null;
								if (((bitField0_ & 0x00000002) == 0x00000002)) {
									subBuilder = instruction_.toBuilder();
								}
								instruction_ = input.readMessage(Ic3Data.Application.Component.Instruction.PARSER,
										extensionRegistry);
								if (subBuilder != null) {
									subBuilder.mergeFrom(instruction_);
									instruction_ = subBuilder.buildPartial();
								}
								bitField0_ |= 0x00000002;
								break;
							}
							}
						}
					} catch (com.google.protobuf.InvalidProtocolBufferException e) {
						throw e.setUnfinishedMessage(this);
					} catch (java.io.IOException e) {
						throw new com.google.protobuf.InvalidProtocolBufferException(e.getMessage())
								.setUnfinishedMessage(this);
					} finally {
						this.unknownFields = unknownFields.build();
						makeExtensionsImmutable();
					}
				}

				public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
					return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_Extra_descriptor;
				}

				@Override
				protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
					return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_Extra_fieldAccessorTable
							.ensureFieldAccessorsInitialized(Ic3Data.Application.Component.Extra.class,
									Ic3Data.Application.Component.Extra.Builder.class);
				}

				public static com.google.protobuf.Parser<Extra> PARSER = new com.google.protobuf.AbstractParser<Extra>() {
					@Override
					public Extra parsePartialFrom(com.google.protobuf.CodedInputStream input,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry)
							throws com.google.protobuf.InvalidProtocolBufferException {
						return new Extra(input, extensionRegistry);
					}
				};

				@java.lang.Override
				public com.google.protobuf.Parser<Extra> getParserForType() {
					return PARSER;
				}

				private int bitField0_;
				// optional string extra = 1;
				public static final int EXTRA_FIELD_NUMBER = 1;
				private java.lang.Object extra_;

				/**
				 * <code>optional string extra = 1;</code>
				 */
				@Override
				public boolean hasExtra() {
					return ((bitField0_ & 0x00000001) == 0x00000001);
				}

				/**
				 * <code>optional string extra = 1;</code>
				 */
				@Override
				public java.lang.String getExtra() {
					java.lang.Object ref = extra_;
					if (ref instanceof java.lang.String) {
						return (java.lang.String) ref;
					} else {
						com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
						java.lang.String s = bs.toStringUtf8();
						if (bs.isValidUtf8()) {
							extra_ = s;
						}
						return s;
					}
				}

				/**
				 * <code>optional string extra = 1;</code>
				 */
				@Override
				public com.google.protobuf.ByteString getExtraBytes() {
					java.lang.Object ref = extra_;
					if (ref instanceof java.lang.String) {
						com.google.protobuf.ByteString b = com.google.protobuf.ByteString
								.copyFromUtf8((java.lang.String) ref);
						extra_ = b;
						return b;
					} else {
						return (com.google.protobuf.ByteString) ref;
					}
				}

				// optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction
				// = 2;
				public static final int INSTRUCTION_FIELD_NUMBER = 2;
				private Ic3Data.Application.Component.Instruction instruction_;

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 2;</code>
				 */
				@Override
				public boolean hasInstruction() {
					return ((bitField0_ & 0x00000002) == 0x00000002);
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 2;</code>
				 */
				@Override
				public Ic3Data.Application.Component.Instruction getInstruction() {
					return instruction_;
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 2;</code>
				 */
				@Override
				public Ic3Data.Application.Component.InstructionOrBuilder getInstructionOrBuilder() {
					return instruction_;
				}

				private void initFields() {
					extra_ = "";
					instruction_ = Ic3Data.Application.Component.Instruction.getDefaultInstance();
				}

				private byte memoizedIsInitialized = -1;

				@Override
				public final boolean isInitialized() {
					byte isInitialized = memoizedIsInitialized;
					if (isInitialized != -1)
						return isInitialized == 1;

					memoizedIsInitialized = 1;
					return true;
				}

				@Override
				public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
					getSerializedSize();
					if (((bitField0_ & 0x00000001) == 0x00000001)) {
						output.writeBytes(1, getExtraBytes());
					}
					if (((bitField0_ & 0x00000002) == 0x00000002)) {
						output.writeMessage(2, instruction_);
					}
					getUnknownFields().writeTo(output);
				}

				private int memoizedSerializedSize = -1;

				@Override
				public int getSerializedSize() {
					int size = memoizedSerializedSize;
					if (size != -1)
						return size;

					size = 0;
					if (((bitField0_ & 0x00000001) == 0x00000001)) {
						size += com.google.protobuf.CodedOutputStream.computeBytesSize(1, getExtraBytes());
					}
					if (((bitField0_ & 0x00000002) == 0x00000002)) {
						size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, instruction_);
					}
					size += getUnknownFields().getSerializedSize();
					memoizedSerializedSize = size;
					return size;
				}

				private static final long serialVersionUID = 0L;

				@java.lang.Override
				protected java.lang.Object writeReplace() throws java.io.ObjectStreamException {
					return super.writeReplace();
				}

				public static Ic3Data.Application.Component.Extra parseFrom(com.google.protobuf.ByteString data)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return PARSER.parseFrom(data);
				}

				public static Ic3Data.Application.Component.Extra parseFrom(com.google.protobuf.ByteString data,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return PARSER.parseFrom(data, extensionRegistry);
				}

				public static Ic3Data.Application.Component.Extra parseFrom(byte[] data)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return PARSER.parseFrom(data);
				}

				public static Ic3Data.Application.Component.Extra parseFrom(byte[] data,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return PARSER.parseFrom(data, extensionRegistry);
				}

				public static Ic3Data.Application.Component.Extra parseFrom(java.io.InputStream input)
						throws java.io.IOException {
					return PARSER.parseFrom(input);
				}

				public static Ic3Data.Application.Component.Extra parseFrom(java.io.InputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
					return PARSER.parseFrom(input, extensionRegistry);
				}

				public static Ic3Data.Application.Component.Extra parseDelimitedFrom(java.io.InputStream input)
						throws java.io.IOException {
					return PARSER.parseDelimitedFrom(input);
				}

				public static Ic3Data.Application.Component.Extra parseDelimitedFrom(java.io.InputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
					return PARSER.parseDelimitedFrom(input, extensionRegistry);
				}

				public static Ic3Data.Application.Component.Extra parseFrom(com.google.protobuf.CodedInputStream input)
						throws java.io.IOException {
					return PARSER.parseFrom(input);
				}

				public static Ic3Data.Application.Component.Extra parseFrom(com.google.protobuf.CodedInputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
					return PARSER.parseFrom(input, extensionRegistry);
				}

				public static Builder newBuilder() {
					return Builder.create();
				}

				@Override
				public Builder newBuilderForType() {
					return newBuilder();
				}

				public static Builder newBuilder(Ic3Data.Application.Component.Extra prototype) {
					return newBuilder().mergeFrom(prototype);
				}

				@Override
				public Builder toBuilder() {
					return newBuilder(this);
				}

				@java.lang.Override
				protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
					Builder builder = new Builder(parent);
					return builder;
				}

				/**
				 * Protobuf type {@code edu.psu.cse.siis.ic3.Application.Component.Extra}
				 */
				public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder>
						implements Ic3Data.Application.Component.ExtraOrBuilder {
					public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
						return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_Extra_descriptor;
					}

					@Override
					protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
						return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_Extra_fieldAccessorTable
								.ensureFieldAccessorsInitialized(Ic3Data.Application.Component.Extra.class,
										Ic3Data.Application.Component.Extra.Builder.class);
					}

					// Construct using Ic3Data.Application.Component.Extra.newBuilder()
					private Builder() {
						maybeForceBuilderInitialization();
					}

					private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
						super(parent);
						maybeForceBuilderInitialization();
					}

					private void maybeForceBuilderInitialization() {
						if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
							getInstructionFieldBuilder();
						}
					}

					private static Builder create() {
						return new Builder();
					}

					@Override
					public Builder clear() {
						super.clear();
						extra_ = "";
						bitField0_ = (bitField0_ & ~0x00000001);
						if (instructionBuilder_ == null) {
							instruction_ = Ic3Data.Application.Component.Instruction.getDefaultInstance();
						} else {
							instructionBuilder_.clear();
						}
						bitField0_ = (bitField0_ & ~0x00000002);
						return this;
					}

					@Override
					public Builder clone() {
						return create().mergeFrom(buildPartial());
					}

					@Override
					public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
						return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_Extra_descriptor;
					}

					@Override
					public Ic3Data.Application.Component.Extra getDefaultInstanceForType() {
						return Ic3Data.Application.Component.Extra.getDefaultInstance();
					}

					@Override
					public Ic3Data.Application.Component.Extra build() {
						Ic3Data.Application.Component.Extra result = buildPartial();
						if (!result.isInitialized()) {
							throw newUninitializedMessageException(result);
						}
						return result;
					}

					@Override
					public Ic3Data.Application.Component.Extra buildPartial() {
						Ic3Data.Application.Component.Extra result = new Ic3Data.Application.Component.Extra(this);
						int from_bitField0_ = bitField0_;
						int to_bitField0_ = 0;
						if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
							to_bitField0_ |= 0x00000001;
						}
						result.extra_ = extra_;
						if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
							to_bitField0_ |= 0x00000002;
						}
						if (instructionBuilder_ == null) {
							result.instruction_ = instruction_;
						} else {
							result.instruction_ = instructionBuilder_.build();
						}
						result.bitField0_ = to_bitField0_;
						onBuilt();
						return result;
					}

					@Override
					public Builder mergeFrom(com.google.protobuf.Message other) {
						if (other instanceof Ic3Data.Application.Component.Extra) {
							return mergeFrom((Ic3Data.Application.Component.Extra) other);
						} else {
							super.mergeFrom(other);
							return this;
						}
					}

					public Builder mergeFrom(Ic3Data.Application.Component.Extra other) {
						if (other == Ic3Data.Application.Component.Extra.getDefaultInstance())
							return this;
						if (other.hasExtra()) {
							bitField0_ |= 0x00000001;
							extra_ = other.extra_;
							onChanged();
						}
						if (other.hasInstruction()) {
							mergeInstruction(other.getInstruction());
						}
						this.mergeUnknownFields(other.getUnknownFields());
						return this;
					}

					@Override
					public final boolean isInitialized() {
						return true;
					}

					@Override
					public Builder mergeFrom(com.google.protobuf.CodedInputStream input,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
						Ic3Data.Application.Component.Extra parsedMessage = null;
						try {
							parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
						} catch (com.google.protobuf.InvalidProtocolBufferException e) {
							parsedMessage = (Ic3Data.Application.Component.Extra) e.getUnfinishedMessage();
							throw e;
						} finally {
							if (parsedMessage != null) {
								mergeFrom(parsedMessage);
							}
						}
						return this;
					}

					private int bitField0_;

					// optional string extra = 1;
					private java.lang.Object extra_ = "";

					/**
					 * <code>optional string extra = 1;</code>
					 */
					@Override
					public boolean hasExtra() {
						return ((bitField0_ & 0x00000001) == 0x00000001);
					}

					/**
					 * <code>optional string extra = 1;</code>
					 */
					@Override
					public java.lang.String getExtra() {
						java.lang.Object ref = extra_;
						if (!(ref instanceof java.lang.String)) {
							java.lang.String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
							extra_ = s;
							return s;
						} else {
							return (java.lang.String) ref;
						}
					}

					/**
					 * <code>optional string extra = 1;</code>
					 */
					@Override
					public com.google.protobuf.ByteString getExtraBytes() {
						java.lang.Object ref = extra_;
						if (ref instanceof String) {
							com.google.protobuf.ByteString b = com.google.protobuf.ByteString
									.copyFromUtf8((java.lang.String) ref);
							extra_ = b;
							return b;
						} else {
							return (com.google.protobuf.ByteString) ref;
						}
					}

					/**
					 * <code>optional string extra = 1;</code>
					 */
					public Builder setExtra(java.lang.String value) {
						if (value == null) {
							throw new NullPointerException();
						}
						bitField0_ |= 0x00000001;
						extra_ = value;
						onChanged();
						return this;
					}

					/**
					 * <code>optional string extra = 1;</code>
					 */
					public Builder clearExtra() {
						bitField0_ = (bitField0_ & ~0x00000001);
						extra_ = getDefaultInstance().getExtra();
						onChanged();
						return this;
					}

					/**
					 * <code>optional string extra = 1;</code>
					 */
					public Builder setExtraBytes(com.google.protobuf.ByteString value) {
						if (value == null) {
							throw new NullPointerException();
						}
						bitField0_ |= 0x00000001;
						extra_ = value;
						onChanged();
						return this;
					}

					// optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction
					// = 2;
					private Ic3Data.Application.Component.Instruction instruction_ = Ic3Data.Application.Component.Instruction
							.getDefaultInstance();
					private com.google.protobuf.SingleFieldBuilder<Ic3Data.Application.Component.Instruction, Ic3Data.Application.Component.Instruction.Builder, Ic3Data.Application.Component.InstructionOrBuilder> instructionBuilder_;

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 2;</code>
					 */
					@Override
					public boolean hasInstruction() {
						return ((bitField0_ & 0x00000002) == 0x00000002);
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 2;</code>
					 */
					@Override
					public Ic3Data.Application.Component.Instruction getInstruction() {
						if (instructionBuilder_ == null) {
							return instruction_;
						} else {
							return instructionBuilder_.getMessage();
						}
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 2;</code>
					 */
					public Builder setInstruction(Ic3Data.Application.Component.Instruction value) {
						if (instructionBuilder_ == null) {
							if (value == null) {
								throw new NullPointerException();
							}
							instruction_ = value;
							onChanged();
						} else {
							instructionBuilder_.setMessage(value);
						}
						bitField0_ |= 0x00000002;
						return this;
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 2;</code>
					 */
					public Builder setInstruction(Ic3Data.Application.Component.Instruction.Builder builderForValue) {
						if (instructionBuilder_ == null) {
							instruction_ = builderForValue.build();
							onChanged();
						} else {
							instructionBuilder_.setMessage(builderForValue.build());
						}
						bitField0_ |= 0x00000002;
						return this;
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 2;</code>
					 */
					public Builder mergeInstruction(Ic3Data.Application.Component.Instruction value) {
						if (instructionBuilder_ == null) {
							if (((bitField0_ & 0x00000002) == 0x00000002)
									&& instruction_ != Ic3Data.Application.Component.Instruction.getDefaultInstance()) {
								instruction_ = Ic3Data.Application.Component.Instruction.newBuilder(instruction_)
										.mergeFrom(value).buildPartial();
							} else {
								instruction_ = value;
							}
							onChanged();
						} else {
							instructionBuilder_.mergeFrom(value);
						}
						bitField0_ |= 0x00000002;
						return this;
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 2;</code>
					 */
					public Builder clearInstruction() {
						if (instructionBuilder_ == null) {
							instruction_ = Ic3Data.Application.Component.Instruction.getDefaultInstance();
							onChanged();
						} else {
							instructionBuilder_.clear();
						}
						bitField0_ = (bitField0_ & ~0x00000002);
						return this;
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 2;</code>
					 */
					public Ic3Data.Application.Component.Instruction.Builder getInstructionBuilder() {
						bitField0_ |= 0x00000002;
						onChanged();
						return getInstructionFieldBuilder().getBuilder();
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 2;</code>
					 */
					@Override
					public Ic3Data.Application.Component.InstructionOrBuilder getInstructionOrBuilder() {
						if (instructionBuilder_ != null) {
							return instructionBuilder_.getMessageOrBuilder();
						} else {
							return instruction_;
						}
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 2;</code>
					 */
					private com.google.protobuf.SingleFieldBuilder<Ic3Data.Application.Component.Instruction, Ic3Data.Application.Component.Instruction.Builder, Ic3Data.Application.Component.InstructionOrBuilder> getInstructionFieldBuilder() {
						if (instructionBuilder_ == null) {
							instructionBuilder_ = new com.google.protobuf.SingleFieldBuilder<Ic3Data.Application.Component.Instruction, Ic3Data.Application.Component.Instruction.Builder, Ic3Data.Application.Component.InstructionOrBuilder>(
									instruction_, getParentForChildren(), isClean());
							instruction_ = null;
						}
						return instructionBuilder_;
					}

					// @@protoc_insertion_point(builder_scope:edu.psu.cse.siis.ic3.Application.Component.Extra)
				}

				static {
					defaultInstance = new Extra(true);
					defaultInstance.initFields();
				}

				// @@protoc_insertion_point(class_scope:edu.psu.cse.siis.ic3.Application.Component.Extra)
			}

			public interface IntentFilterOrBuilder extends com.google.protobuf.MessageOrBuilder {

				// repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;
				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
				 */
				java.util.List<Ic3Data.Attribute> getAttributesList();

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
				 */
				Ic3Data.Attribute getAttributes(int index);

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
				 */
				int getAttributesCount();

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
				 */
				java.util.List<? extends Ic3Data.AttributeOrBuilder> getAttributesOrBuilderList();

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
				 */
				Ic3Data.AttributeOrBuilder getAttributesOrBuilder(int index);
			}

			/**
			 * Protobuf type {@code edu.psu.cse.siis.ic3.Application.Component.IntentFilter}
			 */
			public static final class IntentFilter extends com.google.protobuf.GeneratedMessage
					implements IntentFilterOrBuilder {
				// Use IntentFilter.newBuilder() to construct.
				private IntentFilter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
					super(builder);
					this.unknownFields = builder.getUnknownFields();
				}

				private IntentFilter(boolean noInit) {
					this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance();
				}

				private static final IntentFilter defaultInstance;

				public static IntentFilter getDefaultInstance() {
					return defaultInstance;
				}

				@Override
				public IntentFilter getDefaultInstanceForType() {
					return defaultInstance;
				}

				private final com.google.protobuf.UnknownFieldSet unknownFields;

				@java.lang.Override
				public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
					return this.unknownFields;
				}

				private IntentFilter(com.google.protobuf.CodedInputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry)
						throws com.google.protobuf.InvalidProtocolBufferException {
					initFields();
					int mutable_bitField0_ = 0;
					com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet
							.newBuilder();
					try {
						boolean done = false;
						while (!done) {
							int tag = input.readTag();
							switch (tag) {
							case 0:
								done = true;
								break;
							default: {
								if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
									done = true;
								}
								break;
							}
							case 10: {
								if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
									attributes_ = new java.util.ArrayList<Ic3Data.Attribute>();
									mutable_bitField0_ |= 0x00000001;
								}
								attributes_.add(input.readMessage(Ic3Data.Attribute.PARSER, extensionRegistry));
								break;
							}
							}
						}
					} catch (com.google.protobuf.InvalidProtocolBufferException e) {
						throw e.setUnfinishedMessage(this);
					} catch (java.io.IOException e) {
						throw new com.google.protobuf.InvalidProtocolBufferException(e.getMessage())
								.setUnfinishedMessage(this);
					} finally {
						if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
							attributes_ = java.util.Collections.unmodifiableList(attributes_);
						}
						this.unknownFields = unknownFields.build();
						makeExtensionsImmutable();
					}
				}

				public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
					return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_IntentFilter_descriptor;
				}

				@Override
				protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
					return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_IntentFilter_fieldAccessorTable
							.ensureFieldAccessorsInitialized(Ic3Data.Application.Component.IntentFilter.class,
									Ic3Data.Application.Component.IntentFilter.Builder.class);
				}

				public static com.google.protobuf.Parser<IntentFilter> PARSER = new com.google.protobuf.AbstractParser<IntentFilter>() {
					@Override
					public IntentFilter parsePartialFrom(com.google.protobuf.CodedInputStream input,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry)
							throws com.google.protobuf.InvalidProtocolBufferException {
						return new IntentFilter(input, extensionRegistry);
					}
				};

				@java.lang.Override
				public com.google.protobuf.Parser<IntentFilter> getParserForType() {
					return PARSER;
				}

				// repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;
				public static final int ATTRIBUTES_FIELD_NUMBER = 1;
				private java.util.List<Ic3Data.Attribute> attributes_;

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
				 */
				@Override
				public java.util.List<Ic3Data.Attribute> getAttributesList() {
					return attributes_;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
				 */
				@Override
				public java.util.List<? extends Ic3Data.AttributeOrBuilder> getAttributesOrBuilderList() {
					return attributes_;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
				 */
				@Override
				public int getAttributesCount() {
					return attributes_.size();
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
				 */
				@Override
				public Ic3Data.Attribute getAttributes(int index) {
					return attributes_.get(index);
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
				 */
				@Override
				public Ic3Data.AttributeOrBuilder getAttributesOrBuilder(int index) {
					return attributes_.get(index);
				}

				private void initFields() {
					attributes_ = java.util.Collections.emptyList();
				}

				private byte memoizedIsInitialized = -1;

				@Override
				public final boolean isInitialized() {
					byte isInitialized = memoizedIsInitialized;
					if (isInitialized != -1)
						return isInitialized == 1;

					memoizedIsInitialized = 1;
					return true;
				}

				@Override
				public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
					getSerializedSize();
					for (int i = 0; i < attributes_.size(); i++) {
						output.writeMessage(1, attributes_.get(i));
					}
					getUnknownFields().writeTo(output);
				}

				private int memoizedSerializedSize = -1;

				@Override
				public int getSerializedSize() {
					int size = memoizedSerializedSize;
					if (size != -1)
						return size;

					size = 0;
					for (int i = 0; i < attributes_.size(); i++) {
						size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, attributes_.get(i));
					}
					size += getUnknownFields().getSerializedSize();
					memoizedSerializedSize = size;
					return size;
				}

				private static final long serialVersionUID = 0L;

				@java.lang.Override
				protected java.lang.Object writeReplace() throws java.io.ObjectStreamException {
					return super.writeReplace();
				}

				public static Ic3Data.Application.Component.IntentFilter parseFrom(com.google.protobuf.ByteString data)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return PARSER.parseFrom(data);
				}

				public static Ic3Data.Application.Component.IntentFilter parseFrom(com.google.protobuf.ByteString data,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return PARSER.parseFrom(data, extensionRegistry);
				}

				public static Ic3Data.Application.Component.IntentFilter parseFrom(byte[] data)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return PARSER.parseFrom(data);
				}

				public static Ic3Data.Application.Component.IntentFilter parseFrom(byte[] data,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return PARSER.parseFrom(data, extensionRegistry);
				}

				public static Ic3Data.Application.Component.IntentFilter parseFrom(java.io.InputStream input)
						throws java.io.IOException {
					return PARSER.parseFrom(input);
				}

				public static Ic3Data.Application.Component.IntentFilter parseFrom(java.io.InputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
					return PARSER.parseFrom(input, extensionRegistry);
				}

				public static Ic3Data.Application.Component.IntentFilter parseDelimitedFrom(java.io.InputStream input)
						throws java.io.IOException {
					return PARSER.parseDelimitedFrom(input);
				}

				public static Ic3Data.Application.Component.IntentFilter parseDelimitedFrom(java.io.InputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
					return PARSER.parseDelimitedFrom(input, extensionRegistry);
				}

				public static Ic3Data.Application.Component.IntentFilter parseFrom(
						com.google.protobuf.CodedInputStream input) throws java.io.IOException {
					return PARSER.parseFrom(input);
				}

				public static Ic3Data.Application.Component.IntentFilter parseFrom(
						com.google.protobuf.CodedInputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
					return PARSER.parseFrom(input, extensionRegistry);
				}

				public static Builder newBuilder() {
					return Builder.create();
				}

				@Override
				public Builder newBuilderForType() {
					return newBuilder();
				}

				public static Builder newBuilder(Ic3Data.Application.Component.IntentFilter prototype) {
					return newBuilder().mergeFrom(prototype);
				}

				@Override
				public Builder toBuilder() {
					return newBuilder(this);
				}

				@java.lang.Override
				protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
					Builder builder = new Builder(parent);
					return builder;
				}

				/**
				 * Protobuf type {@code edu.psu.cse.siis.ic3.Application.Component.IntentFilter}
				 */
				public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder>
						implements Ic3Data.Application.Component.IntentFilterOrBuilder {
					public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
						return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_IntentFilter_descriptor;
					}

					@Override
					protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
						return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_IntentFilter_fieldAccessorTable
								.ensureFieldAccessorsInitialized(Ic3Data.Application.Component.IntentFilter.class,
										Ic3Data.Application.Component.IntentFilter.Builder.class);
					}

					// Construct using Ic3Data.Application.Component.IntentFilter.newBuilder()
					private Builder() {
						maybeForceBuilderInitialization();
					}

					private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
						super(parent);
						maybeForceBuilderInitialization();
					}

					private void maybeForceBuilderInitialization() {
						if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
							getAttributesFieldBuilder();
						}
					}

					private static Builder create() {
						return new Builder();
					}

					@Override
					public Builder clear() {
						super.clear();
						if (attributesBuilder_ == null) {
							attributes_ = java.util.Collections.emptyList();
							bitField0_ = (bitField0_ & ~0x00000001);
						} else {
							attributesBuilder_.clear();
						}
						return this;
					}

					@Override
					public Builder clone() {
						return create().mergeFrom(buildPartial());
					}

					@Override
					public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
						return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_IntentFilter_descriptor;
					}

					@Override
					public Ic3Data.Application.Component.IntentFilter getDefaultInstanceForType() {
						return Ic3Data.Application.Component.IntentFilter.getDefaultInstance();
					}

					@Override
					public Ic3Data.Application.Component.IntentFilter build() {
						Ic3Data.Application.Component.IntentFilter result = buildPartial();
						if (!result.isInitialized()) {
							throw newUninitializedMessageException(result);
						}
						return result;
					}

					@Override
					public Ic3Data.Application.Component.IntentFilter buildPartial() {
						Ic3Data.Application.Component.IntentFilter result = new Ic3Data.Application.Component.IntentFilter(
								this);
						int from_bitField0_ = bitField0_;
						if (attributesBuilder_ == null) {
							if (((bitField0_ & 0x00000001) == 0x00000001)) {
								attributes_ = java.util.Collections.unmodifiableList(attributes_);
								bitField0_ = (bitField0_ & ~0x00000001);
							}
							result.attributes_ = attributes_;
						} else {
							result.attributes_ = attributesBuilder_.build();
						}
						onBuilt();
						return result;
					}

					@Override
					public Builder mergeFrom(com.google.protobuf.Message other) {
						if (other instanceof Ic3Data.Application.Component.IntentFilter) {
							return mergeFrom((Ic3Data.Application.Component.IntentFilter) other);
						} else {
							super.mergeFrom(other);
							return this;
						}
					}

					public Builder mergeFrom(Ic3Data.Application.Component.IntentFilter other) {
						if (other == Ic3Data.Application.Component.IntentFilter.getDefaultInstance())
							return this;
						if (attributesBuilder_ == null) {
							if (!other.attributes_.isEmpty()) {
								if (attributes_.isEmpty()) {
									attributes_ = other.attributes_;
									bitField0_ = (bitField0_ & ~0x00000001);
								} else {
									ensureAttributesIsMutable();
									attributes_.addAll(other.attributes_);
								}
								onChanged();
							}
						} else {
							if (!other.attributes_.isEmpty()) {
								if (attributesBuilder_.isEmpty()) {
									attributesBuilder_.dispose();
									attributesBuilder_ = null;
									attributes_ = other.attributes_;
									bitField0_ = (bitField0_ & ~0x00000001);
									attributesBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders
											? getAttributesFieldBuilder()
											: null;
								} else {
									attributesBuilder_.addAllMessages(other.attributes_);
								}
							}
						}
						this.mergeUnknownFields(other.getUnknownFields());
						return this;
					}

					@Override
					public final boolean isInitialized() {
						return true;
					}

					@Override
					public Builder mergeFrom(com.google.protobuf.CodedInputStream input,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
						Ic3Data.Application.Component.IntentFilter parsedMessage = null;
						try {
							parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
						} catch (com.google.protobuf.InvalidProtocolBufferException e) {
							parsedMessage = (Ic3Data.Application.Component.IntentFilter) e.getUnfinishedMessage();
							throw e;
						} finally {
							if (parsedMessage != null) {
								mergeFrom(parsedMessage);
							}
						}
						return this;
					}

					private int bitField0_;

					// repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;
					private java.util.List<Ic3Data.Attribute> attributes_ = java.util.Collections.emptyList();

					private void ensureAttributesIsMutable() {
						if (!((bitField0_ & 0x00000001) == 0x00000001)) {
							attributes_ = new java.util.ArrayList<Ic3Data.Attribute>(attributes_);
							bitField0_ |= 0x00000001;
						}
					}

					private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Attribute, Ic3Data.Attribute.Builder, Ic3Data.AttributeOrBuilder> attributesBuilder_;

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					@Override
					public java.util.List<Ic3Data.Attribute> getAttributesList() {
						if (attributesBuilder_ == null) {
							return java.util.Collections.unmodifiableList(attributes_);
						} else {
							return attributesBuilder_.getMessageList();
						}
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					@Override
					public int getAttributesCount() {
						if (attributesBuilder_ == null) {
							return attributes_.size();
						} else {
							return attributesBuilder_.getCount();
						}
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					@Override
					public Ic3Data.Attribute getAttributes(int index) {
						if (attributesBuilder_ == null) {
							return attributes_.get(index);
						} else {
							return attributesBuilder_.getMessage(index);
						}
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					public Builder setAttributes(int index, Ic3Data.Attribute value) {
						if (attributesBuilder_ == null) {
							if (value == null) {
								throw new NullPointerException();
							}
							ensureAttributesIsMutable();
							attributes_.set(index, value);
							onChanged();
						} else {
							attributesBuilder_.setMessage(index, value);
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					public Builder setAttributes(int index, Ic3Data.Attribute.Builder builderForValue) {
						if (attributesBuilder_ == null) {
							ensureAttributesIsMutable();
							attributes_.set(index, builderForValue.build());
							onChanged();
						} else {
							attributesBuilder_.setMessage(index, builderForValue.build());
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					public Builder addAttributes(Ic3Data.Attribute value) {
						if (attributesBuilder_ == null) {
							if (value == null) {
								throw new NullPointerException();
							}
							ensureAttributesIsMutable();
							attributes_.add(value);
							onChanged();
						} else {
							attributesBuilder_.addMessage(value);
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					public Builder addAttributes(int index, Ic3Data.Attribute value) {
						if (attributesBuilder_ == null) {
							if (value == null) {
								throw new NullPointerException();
							}
							ensureAttributesIsMutable();
							attributes_.add(index, value);
							onChanged();
						} else {
							attributesBuilder_.addMessage(index, value);
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					public Builder addAttributes(Ic3Data.Attribute.Builder builderForValue) {
						if (attributesBuilder_ == null) {
							ensureAttributesIsMutable();
							attributes_.add(builderForValue.build());
							onChanged();
						} else {
							attributesBuilder_.addMessage(builderForValue.build());
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					public Builder addAttributes(int index, Ic3Data.Attribute.Builder builderForValue) {
						if (attributesBuilder_ == null) {
							ensureAttributesIsMutable();
							attributes_.add(index, builderForValue.build());
							onChanged();
						} else {
							attributesBuilder_.addMessage(index, builderForValue.build());
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					public Builder addAllAttributes(java.lang.Iterable<? extends Ic3Data.Attribute> values) {
						if (attributesBuilder_ == null) {
							ensureAttributesIsMutable();
							super.addAll(values, attributes_);
							onChanged();
						} else {
							attributesBuilder_.addAllMessages(values);
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					public Builder clearAttributes() {
						if (attributesBuilder_ == null) {
							attributes_ = java.util.Collections.emptyList();
							bitField0_ = (bitField0_ & ~0x00000001);
							onChanged();
						} else {
							attributesBuilder_.clear();
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					public Builder removeAttributes(int index) {
						if (attributesBuilder_ == null) {
							ensureAttributesIsMutable();
							attributes_.remove(index);
							onChanged();
						} else {
							attributesBuilder_.remove(index);
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					public Ic3Data.Attribute.Builder getAttributesBuilder(int index) {
						return getAttributesFieldBuilder().getBuilder(index);
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					@Override
					public Ic3Data.AttributeOrBuilder getAttributesOrBuilder(int index) {
						if (attributesBuilder_ == null) {
							return attributes_.get(index);
						} else {
							return attributesBuilder_.getMessageOrBuilder(index);
						}
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					@Override
					public java.util.List<? extends Ic3Data.AttributeOrBuilder> getAttributesOrBuilderList() {
						if (attributesBuilder_ != null) {
							return attributesBuilder_.getMessageOrBuilderList();
						} else {
							return java.util.Collections.unmodifiableList(attributes_);
						}
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					public Ic3Data.Attribute.Builder addAttributesBuilder() {
						return getAttributesFieldBuilder().addBuilder(Ic3Data.Attribute.getDefaultInstance());
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					public Ic3Data.Attribute.Builder addAttributesBuilder(int index) {
						return getAttributesFieldBuilder().addBuilder(index, Ic3Data.Attribute.getDefaultInstance());
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					public java.util.List<Ic3Data.Attribute.Builder> getAttributesBuilderList() {
						return getAttributesFieldBuilder().getBuilderList();
					}

					private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Attribute, Ic3Data.Attribute.Builder, Ic3Data.AttributeOrBuilder> getAttributesFieldBuilder() {
						if (attributesBuilder_ == null) {
							attributesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Attribute, Ic3Data.Attribute.Builder, Ic3Data.AttributeOrBuilder>(
									attributes_, ((bitField0_ & 0x00000001) == 0x00000001), getParentForChildren(),
									isClean());
							attributes_ = null;
						}
						return attributesBuilder_;
					}

					// @@protoc_insertion_point(builder_scope:edu.psu.cse.siis.ic3.Application.Component.IntentFilter)
				}

				static {
					defaultInstance = new IntentFilter(true);
					defaultInstance.initFields();
				}

				// @@protoc_insertion_point(class_scope:edu.psu.cse.siis.ic3.Application.Component.IntentFilter)
			}

			public interface InstructionOrBuilder extends com.google.protobuf.MessageOrBuilder {

				// optional string statement = 1;
				/**
				 * <code>optional string statement = 1;</code>
				 */
				boolean hasStatement();

				/**
				 * <code>optional string statement = 1;</code>
				 */
				java.lang.String getStatement();

				/**
				 * <code>optional string statement = 1;</code>
				 */
				com.google.protobuf.ByteString getStatementBytes();

				// optional string class_name = 2;
				/**
				 * <code>optional string class_name = 2;</code>
				 */
				boolean hasClassName();

				/**
				 * <code>optional string class_name = 2;</code>
				 */
				java.lang.String getClassName();

				/**
				 * <code>optional string class_name = 2;</code>
				 */
				com.google.protobuf.ByteString getClassNameBytes();

				// optional string method = 3;
				/**
				 * <code>optional string method = 3;</code>
				 */
				boolean hasMethod();

				/**
				 * <code>optional string method = 3;</code>
				 */
				java.lang.String getMethod();

				/**
				 * <code>optional string method = 3;</code>
				 */
				com.google.protobuf.ByteString getMethodBytes();

				// optional uint32 id = 4;
				/**
				 * <code>optional uint32 id = 4;</code>
				 */
				boolean hasId();

				/**
				 * <code>optional uint32 id = 4;</code>
				 */
				int getId();
			}

			/**
			 * Protobuf type {@code edu.psu.cse.siis.ic3.Application.Component.Instruction}
			 */
			public static final class Instruction extends com.google.protobuf.GeneratedMessage
					implements InstructionOrBuilder {
				// Use Instruction.newBuilder() to construct.
				private Instruction(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
					super(builder);
					this.unknownFields = builder.getUnknownFields();
				}

				private Instruction(boolean noInit) {
					this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance();
				}

				private static final Instruction defaultInstance;

				public static Instruction getDefaultInstance() {
					return defaultInstance;
				}

				@Override
				public Instruction getDefaultInstanceForType() {
					return defaultInstance;
				}

				private final com.google.protobuf.UnknownFieldSet unknownFields;

				@java.lang.Override
				public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
					return this.unknownFields;
				}

				private Instruction(com.google.protobuf.CodedInputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry)
						throws com.google.protobuf.InvalidProtocolBufferException {
					initFields();
					int mutable_bitField0_ = 0;
					com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet
							.newBuilder();
					try {
						boolean done = false;
						while (!done) {
							int tag = input.readTag();
							switch (tag) {
							case 0:
								done = true;
								break;
							default: {
								if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
									done = true;
								}
								break;
							}
							case 10: {
								bitField0_ |= 0x00000001;
								statement_ = input.readBytes();
								break;
							}
							case 18: {
								bitField0_ |= 0x00000002;
								className_ = input.readBytes();
								break;
							}
							case 26: {
								bitField0_ |= 0x00000004;
								method_ = input.readBytes();
								break;
							}
							case 32: {
								bitField0_ |= 0x00000008;
								id_ = input.readUInt32();
								break;
							}
							}
						}
					} catch (com.google.protobuf.InvalidProtocolBufferException e) {
						throw e.setUnfinishedMessage(this);
					} catch (java.io.IOException e) {
						throw new com.google.protobuf.InvalidProtocolBufferException(e.getMessage())
								.setUnfinishedMessage(this);
					} finally {
						this.unknownFields = unknownFields.build();
						makeExtensionsImmutable();
					}
				}

				public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
					return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_Instruction_descriptor;
				}

				@Override
				protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
					return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_Instruction_fieldAccessorTable
							.ensureFieldAccessorsInitialized(Ic3Data.Application.Component.Instruction.class,
									Ic3Data.Application.Component.Instruction.Builder.class);
				}

				public static com.google.protobuf.Parser<Instruction> PARSER = new com.google.protobuf.AbstractParser<Instruction>() {
					@Override
					public Instruction parsePartialFrom(com.google.protobuf.CodedInputStream input,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry)
							throws com.google.protobuf.InvalidProtocolBufferException {
						return new Instruction(input, extensionRegistry);
					}
				};

				@java.lang.Override
				public com.google.protobuf.Parser<Instruction> getParserForType() {
					return PARSER;
				}

				private int bitField0_;
				// optional string statement = 1;
				public static final int STATEMENT_FIELD_NUMBER = 1;
				private java.lang.Object statement_;

				/**
				 * <code>optional string statement = 1;</code>
				 */
				@Override
				public boolean hasStatement() {
					return ((bitField0_ & 0x00000001) == 0x00000001);
				}

				/**
				 * <code>optional string statement = 1;</code>
				 */
				@Override
				public java.lang.String getStatement() {
					java.lang.Object ref = statement_;
					if (ref instanceof java.lang.String) {
						return (java.lang.String) ref;
					} else {
						com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
						java.lang.String s = bs.toStringUtf8();
						if (bs.isValidUtf8()) {
							statement_ = s;
						}
						return s;
					}
				}

				/**
				 * <code>optional string statement = 1;</code>
				 */
				@Override
				public com.google.protobuf.ByteString getStatementBytes() {
					java.lang.Object ref = statement_;
					if (ref instanceof java.lang.String) {
						com.google.protobuf.ByteString b = com.google.protobuf.ByteString
								.copyFromUtf8((java.lang.String) ref);
						statement_ = b;
						return b;
					} else {
						return (com.google.protobuf.ByteString) ref;
					}
				}

				// optional string class_name = 2;
				public static final int CLASS_NAME_FIELD_NUMBER = 2;
				private java.lang.Object className_;

				/**
				 * <code>optional string class_name = 2;</code>
				 */
				@Override
				public boolean hasClassName() {
					return ((bitField0_ & 0x00000002) == 0x00000002);
				}

				/**
				 * <code>optional string class_name = 2;</code>
				 */
				@Override
				public java.lang.String getClassName() {
					java.lang.Object ref = className_;
					if (ref instanceof java.lang.String) {
						return (java.lang.String) ref;
					} else {
						com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
						java.lang.String s = bs.toStringUtf8();
						if (bs.isValidUtf8()) {
							className_ = s;
						}
						return s;
					}
				}

				/**
				 * <code>optional string class_name = 2;</code>
				 */
				@Override
				public com.google.protobuf.ByteString getClassNameBytes() {
					java.lang.Object ref = className_;
					if (ref instanceof java.lang.String) {
						com.google.protobuf.ByteString b = com.google.protobuf.ByteString
								.copyFromUtf8((java.lang.String) ref);
						className_ = b;
						return b;
					} else {
						return (com.google.protobuf.ByteString) ref;
					}
				}

				// optional string method = 3;
				public static final int METHOD_FIELD_NUMBER = 3;
				private java.lang.Object method_;

				/**
				 * <code>optional string method = 3;</code>
				 */
				@Override
				public boolean hasMethod() {
					return ((bitField0_ & 0x00000004) == 0x00000004);
				}

				/**
				 * <code>optional string method = 3;</code>
				 */
				@Override
				public java.lang.String getMethod() {
					java.lang.Object ref = method_;
					if (ref instanceof java.lang.String) {
						return (java.lang.String) ref;
					} else {
						com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
						java.lang.String s = bs.toStringUtf8();
						if (bs.isValidUtf8()) {
							method_ = s;
						}
						return s;
					}
				}

				/**
				 * <code>optional string method = 3;</code>
				 */
				@Override
				public com.google.protobuf.ByteString getMethodBytes() {
					java.lang.Object ref = method_;
					if (ref instanceof java.lang.String) {
						com.google.protobuf.ByteString b = com.google.protobuf.ByteString
								.copyFromUtf8((java.lang.String) ref);
						method_ = b;
						return b;
					} else {
						return (com.google.protobuf.ByteString) ref;
					}
				}

				// optional uint32 id = 4;
				public static final int ID_FIELD_NUMBER = 4;
				private int id_;

				/**
				 * <code>optional uint32 id = 4;</code>
				 */
				@Override
				public boolean hasId() {
					return ((bitField0_ & 0x00000008) == 0x00000008);
				}

				/**
				 * <code>optional uint32 id = 4;</code>
				 */
				@Override
				public int getId() {
					return id_;
				}

				private void initFields() {
					statement_ = "";
					className_ = "";
					method_ = "";
					id_ = 0;
				}

				private byte memoizedIsInitialized = -1;

				@Override
				public final boolean isInitialized() {
					byte isInitialized = memoizedIsInitialized;
					if (isInitialized != -1)
						return isInitialized == 1;

					memoizedIsInitialized = 1;
					return true;
				}

				@Override
				public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
					getSerializedSize();
					if (((bitField0_ & 0x00000001) == 0x00000001)) {
						output.writeBytes(1, getStatementBytes());
					}
					if (((bitField0_ & 0x00000002) == 0x00000002)) {
						output.writeBytes(2, getClassNameBytes());
					}
					if (((bitField0_ & 0x00000004) == 0x00000004)) {
						output.writeBytes(3, getMethodBytes());
					}
					if (((bitField0_ & 0x00000008) == 0x00000008)) {
						output.writeUInt32(4, id_);
					}
					getUnknownFields().writeTo(output);
				}

				private int memoizedSerializedSize = -1;

				@Override
				public int getSerializedSize() {
					int size = memoizedSerializedSize;
					if (size != -1)
						return size;

					size = 0;
					if (((bitField0_ & 0x00000001) == 0x00000001)) {
						size += com.google.protobuf.CodedOutputStream.computeBytesSize(1, getStatementBytes());
					}
					if (((bitField0_ & 0x00000002) == 0x00000002)) {
						size += com.google.protobuf.CodedOutputStream.computeBytesSize(2, getClassNameBytes());
					}
					if (((bitField0_ & 0x00000004) == 0x00000004)) {
						size += com.google.protobuf.CodedOutputStream.computeBytesSize(3, getMethodBytes());
					}
					if (((bitField0_ & 0x00000008) == 0x00000008)) {
						size += com.google.protobuf.CodedOutputStream.computeUInt32Size(4, id_);
					}
					size += getUnknownFields().getSerializedSize();
					memoizedSerializedSize = size;
					return size;
				}

				private static final long serialVersionUID = 0L;

				@java.lang.Override
				protected java.lang.Object writeReplace() throws java.io.ObjectStreamException {
					return super.writeReplace();
				}

				public static Ic3Data.Application.Component.Instruction parseFrom(com.google.protobuf.ByteString data)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return PARSER.parseFrom(data);
				}

				public static Ic3Data.Application.Component.Instruction parseFrom(com.google.protobuf.ByteString data,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return PARSER.parseFrom(data, extensionRegistry);
				}

				public static Ic3Data.Application.Component.Instruction parseFrom(byte[] data)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return PARSER.parseFrom(data);
				}

				public static Ic3Data.Application.Component.Instruction parseFrom(byte[] data,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return PARSER.parseFrom(data, extensionRegistry);
				}

				public static Ic3Data.Application.Component.Instruction parseFrom(java.io.InputStream input)
						throws java.io.IOException {
					return PARSER.parseFrom(input);
				}

				public static Ic3Data.Application.Component.Instruction parseFrom(java.io.InputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
					return PARSER.parseFrom(input, extensionRegistry);
				}

				public static Ic3Data.Application.Component.Instruction parseDelimitedFrom(java.io.InputStream input)
						throws java.io.IOException {
					return PARSER.parseDelimitedFrom(input);
				}

				public static Ic3Data.Application.Component.Instruction parseDelimitedFrom(java.io.InputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
					return PARSER.parseDelimitedFrom(input, extensionRegistry);
				}

				public static Ic3Data.Application.Component.Instruction parseFrom(
						com.google.protobuf.CodedInputStream input) throws java.io.IOException {
					return PARSER.parseFrom(input);
				}

				public static Ic3Data.Application.Component.Instruction parseFrom(
						com.google.protobuf.CodedInputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
					return PARSER.parseFrom(input, extensionRegistry);
				}

				public static Builder newBuilder() {
					return Builder.create();
				}

				@Override
				public Builder newBuilderForType() {
					return newBuilder();
				}

				public static Builder newBuilder(Ic3Data.Application.Component.Instruction prototype) {
					return newBuilder().mergeFrom(prototype);
				}

				@Override
				public Builder toBuilder() {
					return newBuilder(this);
				}

				@java.lang.Override
				protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
					Builder builder = new Builder(parent);
					return builder;
				}

				/**
				 * Protobuf type {@code edu.psu.cse.siis.ic3.Application.Component.Instruction}
				 */
				public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder>
						implements Ic3Data.Application.Component.InstructionOrBuilder {
					public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
						return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_Instruction_descriptor;
					}

					@Override
					protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
						return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_Instruction_fieldAccessorTable
								.ensureFieldAccessorsInitialized(Ic3Data.Application.Component.Instruction.class,
										Ic3Data.Application.Component.Instruction.Builder.class);
					}

					// Construct using Ic3Data.Application.Component.Instruction.newBuilder()
					private Builder() {
						maybeForceBuilderInitialization();
					}

					private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
						super(parent);
						maybeForceBuilderInitialization();
					}

					private void maybeForceBuilderInitialization() {
						if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
						}
					}

					private static Builder create() {
						return new Builder();
					}

					@Override
					public Builder clear() {
						super.clear();
						statement_ = "";
						bitField0_ = (bitField0_ & ~0x00000001);
						className_ = "";
						bitField0_ = (bitField0_ & ~0x00000002);
						method_ = "";
						bitField0_ = (bitField0_ & ~0x00000004);
						id_ = 0;
						bitField0_ = (bitField0_ & ~0x00000008);
						return this;
					}

					@Override
					public Builder clone() {
						return create().mergeFrom(buildPartial());
					}

					@Override
					public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
						return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_Instruction_descriptor;
					}

					@Override
					public Ic3Data.Application.Component.Instruction getDefaultInstanceForType() {
						return Ic3Data.Application.Component.Instruction.getDefaultInstance();
					}

					@Override
					public Ic3Data.Application.Component.Instruction build() {
						Ic3Data.Application.Component.Instruction result = buildPartial();
						if (!result.isInitialized()) {
							throw newUninitializedMessageException(result);
						}
						return result;
					}

					@Override
					public Ic3Data.Application.Component.Instruction buildPartial() {
						Ic3Data.Application.Component.Instruction result = new Ic3Data.Application.Component.Instruction(
								this);
						int from_bitField0_ = bitField0_;
						int to_bitField0_ = 0;
						if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
							to_bitField0_ |= 0x00000001;
						}
						result.statement_ = statement_;
						if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
							to_bitField0_ |= 0x00000002;
						}
						result.className_ = className_;
						if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
							to_bitField0_ |= 0x00000004;
						}
						result.method_ = method_;
						if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
							to_bitField0_ |= 0x00000008;
						}
						result.id_ = id_;
						result.bitField0_ = to_bitField0_;
						onBuilt();
						return result;
					}

					@Override
					public Builder mergeFrom(com.google.protobuf.Message other) {
						if (other instanceof Ic3Data.Application.Component.Instruction) {
							return mergeFrom((Ic3Data.Application.Component.Instruction) other);
						} else {
							super.mergeFrom(other);
							return this;
						}
					}

					public Builder mergeFrom(Ic3Data.Application.Component.Instruction other) {
						if (other == Ic3Data.Application.Component.Instruction.getDefaultInstance())
							return this;
						if (other.hasStatement()) {
							bitField0_ |= 0x00000001;
							statement_ = other.statement_;
							onChanged();
						}
						if (other.hasClassName()) {
							bitField0_ |= 0x00000002;
							className_ = other.className_;
							onChanged();
						}
						if (other.hasMethod()) {
							bitField0_ |= 0x00000004;
							method_ = other.method_;
							onChanged();
						}
						if (other.hasId()) {
							setId(other.getId());
						}
						this.mergeUnknownFields(other.getUnknownFields());
						return this;
					}

					@Override
					public final boolean isInitialized() {
						return true;
					}

					@Override
					public Builder mergeFrom(com.google.protobuf.CodedInputStream input,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
						Ic3Data.Application.Component.Instruction parsedMessage = null;
						try {
							parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
						} catch (com.google.protobuf.InvalidProtocolBufferException e) {
							parsedMessage = (Ic3Data.Application.Component.Instruction) e.getUnfinishedMessage();
							throw e;
						} finally {
							if (parsedMessage != null) {
								mergeFrom(parsedMessage);
							}
						}
						return this;
					}

					private int bitField0_;

					// optional string statement = 1;
					private java.lang.Object statement_ = "";

					/**
					 * <code>optional string statement = 1;</code>
					 */
					@Override
					public boolean hasStatement() {
						return ((bitField0_ & 0x00000001) == 0x00000001);
					}

					/**
					 * <code>optional string statement = 1;</code>
					 */
					@Override
					public java.lang.String getStatement() {
						java.lang.Object ref = statement_;
						if (!(ref instanceof java.lang.String)) {
							java.lang.String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
							statement_ = s;
							return s;
						} else {
							return (java.lang.String) ref;
						}
					}

					/**
					 * <code>optional string statement = 1;</code>
					 */
					@Override
					public com.google.protobuf.ByteString getStatementBytes() {
						java.lang.Object ref = statement_;
						if (ref instanceof String) {
							com.google.protobuf.ByteString b = com.google.protobuf.ByteString
									.copyFromUtf8((java.lang.String) ref);
							statement_ = b;
							return b;
						} else {
							return (com.google.protobuf.ByteString) ref;
						}
					}

					/**
					 * <code>optional string statement = 1;</code>
					 */
					public Builder setStatement(java.lang.String value) {
						if (value == null) {
							throw new NullPointerException();
						}
						bitField0_ |= 0x00000001;
						statement_ = value;
						onChanged();
						return this;
					}

					/**
					 * <code>optional string statement = 1;</code>
					 */
					public Builder clearStatement() {
						bitField0_ = (bitField0_ & ~0x00000001);
						statement_ = getDefaultInstance().getStatement();
						onChanged();
						return this;
					}

					/**
					 * <code>optional string statement = 1;</code>
					 */
					public Builder setStatementBytes(com.google.protobuf.ByteString value) {
						if (value == null) {
							throw new NullPointerException();
						}
						bitField0_ |= 0x00000001;
						statement_ = value;
						onChanged();
						return this;
					}

					// optional string class_name = 2;
					private java.lang.Object className_ = "";

					/**
					 * <code>optional string class_name = 2;</code>
					 */
					@Override
					public boolean hasClassName() {
						return ((bitField0_ & 0x00000002) == 0x00000002);
					}

					/**
					 * <code>optional string class_name = 2;</code>
					 */
					@Override
					public java.lang.String getClassName() {
						java.lang.Object ref = className_;
						if (!(ref instanceof java.lang.String)) {
							java.lang.String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
							className_ = s;
							return s;
						} else {
							return (java.lang.String) ref;
						}
					}

					/**
					 * <code>optional string class_name = 2;</code>
					 */
					@Override
					public com.google.protobuf.ByteString getClassNameBytes() {
						java.lang.Object ref = className_;
						if (ref instanceof String) {
							com.google.protobuf.ByteString b = com.google.protobuf.ByteString
									.copyFromUtf8((java.lang.String) ref);
							className_ = b;
							return b;
						} else {
							return (com.google.protobuf.ByteString) ref;
						}
					}

					/**
					 * <code>optional string class_name = 2;</code>
					 */
					public Builder setClassName(java.lang.String value) {
						if (value == null) {
							throw new NullPointerException();
						}
						bitField0_ |= 0x00000002;
						className_ = value;
						onChanged();
						return this;
					}

					/**
					 * <code>optional string class_name = 2;</code>
					 */
					public Builder clearClassName() {
						bitField0_ = (bitField0_ & ~0x00000002);
						className_ = getDefaultInstance().getClassName();
						onChanged();
						return this;
					}

					/**
					 * <code>optional string class_name = 2;</code>
					 */
					public Builder setClassNameBytes(com.google.protobuf.ByteString value) {
						if (value == null) {
							throw new NullPointerException();
						}
						bitField0_ |= 0x00000002;
						className_ = value;
						onChanged();
						return this;
					}

					// optional string method = 3;
					private java.lang.Object method_ = "";

					/**
					 * <code>optional string method = 3;</code>
					 */
					@Override
					public boolean hasMethod() {
						return ((bitField0_ & 0x00000004) == 0x00000004);
					}

					/**
					 * <code>optional string method = 3;</code>
					 */
					@Override
					public java.lang.String getMethod() {
						java.lang.Object ref = method_;
						if (!(ref instanceof java.lang.String)) {
							java.lang.String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
							method_ = s;
							return s;
						} else {
							return (java.lang.String) ref;
						}
					}

					/**
					 * <code>optional string method = 3;</code>
					 */
					@Override
					public com.google.protobuf.ByteString getMethodBytes() {
						java.lang.Object ref = method_;
						if (ref instanceof String) {
							com.google.protobuf.ByteString b = com.google.protobuf.ByteString
									.copyFromUtf8((java.lang.String) ref);
							method_ = b;
							return b;
						} else {
							return (com.google.protobuf.ByteString) ref;
						}
					}

					/**
					 * <code>optional string method = 3;</code>
					 */
					public Builder setMethod(java.lang.String value) {
						if (value == null) {
							throw new NullPointerException();
						}
						bitField0_ |= 0x00000004;
						method_ = value;
						onChanged();
						return this;
					}

					/**
					 * <code>optional string method = 3;</code>
					 */
					public Builder clearMethod() {
						bitField0_ = (bitField0_ & ~0x00000004);
						method_ = getDefaultInstance().getMethod();
						onChanged();
						return this;
					}

					/**
					 * <code>optional string method = 3;</code>
					 */
					public Builder setMethodBytes(com.google.protobuf.ByteString value) {
						if (value == null) {
							throw new NullPointerException();
						}
						bitField0_ |= 0x00000004;
						method_ = value;
						onChanged();
						return this;
					}

					// optional uint32 id = 4;
					private int id_;

					/**
					 * <code>optional uint32 id = 4;</code>
					 */
					@Override
					public boolean hasId() {
						return ((bitField0_ & 0x00000008) == 0x00000008);
					}

					/**
					 * <code>optional uint32 id = 4;</code>
					 */
					@Override
					public int getId() {
						return id_;
					}

					/**
					 * <code>optional uint32 id = 4;</code>
					 */
					public Builder setId(int value) {
						bitField0_ |= 0x00000008;
						id_ = value;
						onChanged();
						return this;
					}

					/**
					 * <code>optional uint32 id = 4;</code>
					 */
					public Builder clearId() {
						bitField0_ = (bitField0_ & ~0x00000008);
						id_ = 0;
						onChanged();
						return this;
					}

					// @@protoc_insertion_point(builder_scope:edu.psu.cse.siis.ic3.Application.Component.Instruction)
				}

				static {
					defaultInstance = new Instruction(true);
					defaultInstance.initFields();
				}

				// @@protoc_insertion_point(class_scope:edu.psu.cse.siis.ic3.Application.Component.Instruction)
			}

			public interface ExitPointOrBuilder extends com.google.protobuf.MessageOrBuilder {

				// optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction
				// = 1;
				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 1;</code>
				 */
				boolean hasInstruction();

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 1;</code>
				 */
				Ic3Data.Application.Component.Instruction getInstruction();

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 1;</code>
				 */
				Ic3Data.Application.Component.InstructionOrBuilder getInstructionOrBuilder();

				// optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;
				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;</code>
				 */
				boolean hasKind();

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;</code>
				 */
				Ic3Data.Application.Component.ComponentKind getKind();

				// optional uint32 missing = 3;
				/**
				 * <code>optional uint32 missing = 3;</code>
				 */
				boolean hasMissing();

				/**
				 * <code>optional uint32 missing = 3;</code>
				 */
				int getMissing();

				// repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents
				// = 4;
				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
				 */
				java.util.List<Ic3Data.Application.Component.ExitPoint.Intent> getIntentsList();

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
				 */
				Ic3Data.Application.Component.ExitPoint.Intent getIntents(int index);

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
				 */
				int getIntentsCount();

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
				 */
				java.util.List<? extends Ic3Data.Application.Component.ExitPoint.IntentOrBuilder> getIntentsOrBuilderList();

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
				 */
				Ic3Data.Application.Component.ExitPoint.IntentOrBuilder getIntentsOrBuilder(int index);

				// repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;
				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
				 */
				java.util.List<Ic3Data.Application.Component.ExitPoint.Uri> getUrisList();

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
				 */
				Ic3Data.Application.Component.ExitPoint.Uri getUris(int index);

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
				 */
				int getUrisCount();

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
				 */
				java.util.List<? extends Ic3Data.Application.Component.ExitPoint.UriOrBuilder> getUrisOrBuilderList();

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
				 */
				Ic3Data.Application.Component.ExitPoint.UriOrBuilder getUrisOrBuilder(int index);
			}

			/**
			 * Protobuf type {@code edu.psu.cse.siis.ic3.Application.Component.ExitPoint}
			 */
			public static final class ExitPoint extends com.google.protobuf.GeneratedMessage
					implements ExitPointOrBuilder {
				// Use ExitPoint.newBuilder() to construct.
				private ExitPoint(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
					super(builder);
					this.unknownFields = builder.getUnknownFields();
				}

				private ExitPoint(boolean noInit) {
					this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance();
				}

				private static final ExitPoint defaultInstance;

				public static ExitPoint getDefaultInstance() {
					return defaultInstance;
				}

				@Override
				public ExitPoint getDefaultInstanceForType() {
					return defaultInstance;
				}

				private final com.google.protobuf.UnknownFieldSet unknownFields;

				@java.lang.Override
				public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
					return this.unknownFields;
				}

				private ExitPoint(com.google.protobuf.CodedInputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry)
						throws com.google.protobuf.InvalidProtocolBufferException {
					initFields();
					int mutable_bitField0_ = 0;
					com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet
							.newBuilder();
					try {
						boolean done = false;
						while (!done) {
							int tag = input.readTag();
							switch (tag) {
							case 0:
								done = true;
								break;
							default: {
								if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
									done = true;
								}
								break;
							}
							case 10: {
								Ic3Data.Application.Component.Instruction.Builder subBuilder = null;
								if (((bitField0_ & 0x00000001) == 0x00000001)) {
									subBuilder = instruction_.toBuilder();
								}
								instruction_ = input.readMessage(Ic3Data.Application.Component.Instruction.PARSER,
										extensionRegistry);
								if (subBuilder != null) {
									subBuilder.mergeFrom(instruction_);
									instruction_ = subBuilder.buildPartial();
								}
								bitField0_ |= 0x00000001;
								break;
							}
							case 16: {
								int rawValue = input.readEnum();
								Ic3Data.Application.Component.ComponentKind value = Ic3Data.Application.Component.ComponentKind
										.valueOf(rawValue);
								if (value == null) {
									unknownFields.mergeVarintField(2, rawValue);
								} else {
									bitField0_ |= 0x00000002;
									kind_ = value;
								}
								break;
							}
							case 24: {
								bitField0_ |= 0x00000004;
								missing_ = input.readUInt32();
								break;
							}
							case 34: {
								if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
									intents_ = new java.util.ArrayList<Ic3Data.Application.Component.ExitPoint.Intent>();
									mutable_bitField0_ |= 0x00000008;
								}
								intents_.add(input.readMessage(Ic3Data.Application.Component.ExitPoint.Intent.PARSER,
										extensionRegistry));
								break;
							}
							case 42: {
								if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
									uris_ = new java.util.ArrayList<Ic3Data.Application.Component.ExitPoint.Uri>();
									mutable_bitField0_ |= 0x00000010;
								}
								uris_.add(input.readMessage(Ic3Data.Application.Component.ExitPoint.Uri.PARSER,
										extensionRegistry));
								break;
							}
							}
						}
					} catch (com.google.protobuf.InvalidProtocolBufferException e) {
						throw e.setUnfinishedMessage(this);
					} catch (java.io.IOException e) {
						throw new com.google.protobuf.InvalidProtocolBufferException(e.getMessage())
								.setUnfinishedMessage(this);
					} finally {
						if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
							intents_ = java.util.Collections.unmodifiableList(intents_);
						}
						if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
							uris_ = java.util.Collections.unmodifiableList(uris_);
						}
						this.unknownFields = unknownFields.build();
						makeExtensionsImmutable();
					}
				}

				public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
					return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_descriptor;
				}

				@Override
				protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
					return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_fieldAccessorTable
							.ensureFieldAccessorsInitialized(Ic3Data.Application.Component.ExitPoint.class,
									Ic3Data.Application.Component.ExitPoint.Builder.class);
				}

				public static com.google.protobuf.Parser<ExitPoint> PARSER = new com.google.protobuf.AbstractParser<ExitPoint>() {
					@Override
					public ExitPoint parsePartialFrom(com.google.protobuf.CodedInputStream input,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry)
							throws com.google.protobuf.InvalidProtocolBufferException {
						return new ExitPoint(input, extensionRegistry);
					}
				};

				@java.lang.Override
				public com.google.protobuf.Parser<ExitPoint> getParserForType() {
					return PARSER;
				}

				public interface IntentOrBuilder extends com.google.protobuf.MessageOrBuilder {

					// repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;
					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					java.util.List<Ic3Data.Attribute> getAttributesList();

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					Ic3Data.Attribute getAttributes(int index);

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					int getAttributesCount();

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					java.util.List<? extends Ic3Data.AttributeOrBuilder> getAttributesOrBuilderList();

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					Ic3Data.AttributeOrBuilder getAttributesOrBuilder(int index);

					// optional string permission = 2;
					/**
					 * <code>optional string permission = 2;</code>
					 */
					boolean hasPermission();

					/**
					 * <code>optional string permission = 2;</code>
					 */
					java.lang.String getPermission();

					/**
					 * <code>optional string permission = 2;</code>
					 */
					com.google.protobuf.ByteString getPermissionBytes();
				}

				/**
				 * Protobuf type
				 * {@code edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent}
				 */
				public static final class Intent extends com.google.protobuf.GeneratedMessage
						implements IntentOrBuilder {
					// Use Intent.newBuilder() to construct.
					private Intent(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
						super(builder);
						this.unknownFields = builder.getUnknownFields();
					}

					private Intent(boolean noInit) {
						this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance();
					}

					private static final Intent defaultInstance;

					public static Intent getDefaultInstance() {
						return defaultInstance;
					}

					@Override
					public Intent getDefaultInstanceForType() {
						return defaultInstance;
					}

					private final com.google.protobuf.UnknownFieldSet unknownFields;

					@java.lang.Override
					public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
						return this.unknownFields;
					}

					private Intent(com.google.protobuf.CodedInputStream input,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry)
							throws com.google.protobuf.InvalidProtocolBufferException {
						initFields();
						int mutable_bitField0_ = 0;
						com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet
								.newBuilder();
						try {
							boolean done = false;
							while (!done) {
								int tag = input.readTag();
								switch (tag) {
								case 0:
									done = true;
									break;
								default: {
									if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
										done = true;
									}
									break;
								}
								case 10: {
									if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
										attributes_ = new java.util.ArrayList<Ic3Data.Attribute>();
										mutable_bitField0_ |= 0x00000001;
									}
									attributes_.add(input.readMessage(Ic3Data.Attribute.PARSER, extensionRegistry));
									break;
								}
								case 18: {
									bitField0_ |= 0x00000001;
									permission_ = input.readBytes();
									break;
								}
								}
							}
						} catch (com.google.protobuf.InvalidProtocolBufferException e) {
							throw e.setUnfinishedMessage(this);
						} catch (java.io.IOException e) {
							throw new com.google.protobuf.InvalidProtocolBufferException(e.getMessage())
									.setUnfinishedMessage(this);
						} finally {
							if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
								attributes_ = java.util.Collections.unmodifiableList(attributes_);
							}
							this.unknownFields = unknownFields.build();
							makeExtensionsImmutable();
						}
					}

					public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
						return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Intent_descriptor;
					}

					@Override
					protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
						return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Intent_fieldAccessorTable
								.ensureFieldAccessorsInitialized(Ic3Data.Application.Component.ExitPoint.Intent.class,
										Ic3Data.Application.Component.ExitPoint.Intent.Builder.class);
					}

					public static com.google.protobuf.Parser<Intent> PARSER = new com.google.protobuf.AbstractParser<Intent>() {
						@Override
						public Intent parsePartialFrom(com.google.protobuf.CodedInputStream input,
								com.google.protobuf.ExtensionRegistryLite extensionRegistry)
								throws com.google.protobuf.InvalidProtocolBufferException {
							return new Intent(input, extensionRegistry);
						}
					};

					@java.lang.Override
					public com.google.protobuf.Parser<Intent> getParserForType() {
						return PARSER;
					}

					private int bitField0_;
					// repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;
					public static final int ATTRIBUTES_FIELD_NUMBER = 1;
					private java.util.List<Ic3Data.Attribute> attributes_;

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					@Override
					public java.util.List<Ic3Data.Attribute> getAttributesList() {
						return attributes_;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					@Override
					public java.util.List<? extends Ic3Data.AttributeOrBuilder> getAttributesOrBuilderList() {
						return attributes_;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					@Override
					public int getAttributesCount() {
						return attributes_.size();
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					@Override
					public Ic3Data.Attribute getAttributes(int index) {
						return attributes_.get(index);
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					@Override
					public Ic3Data.AttributeOrBuilder getAttributesOrBuilder(int index) {
						return attributes_.get(index);
					}

					// optional string permission = 2;
					public static final int PERMISSION_FIELD_NUMBER = 2;
					private java.lang.Object permission_;

					/**
					 * <code>optional string permission = 2;</code>
					 */
					@Override
					public boolean hasPermission() {
						return ((bitField0_ & 0x00000001) == 0x00000001);
					}

					/**
					 * <code>optional string permission = 2;</code>
					 */
					@Override
					public java.lang.String getPermission() {
						java.lang.Object ref = permission_;
						if (ref instanceof java.lang.String) {
							return (java.lang.String) ref;
						} else {
							com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
							java.lang.String s = bs.toStringUtf8();
							if (bs.isValidUtf8()) {
								permission_ = s;
							}
							return s;
						}
					}

					/**
					 * <code>optional string permission = 2;</code>
					 */
					@Override
					public com.google.protobuf.ByteString getPermissionBytes() {
						java.lang.Object ref = permission_;
						if (ref instanceof java.lang.String) {
							com.google.protobuf.ByteString b = com.google.protobuf.ByteString
									.copyFromUtf8((java.lang.String) ref);
							permission_ = b;
							return b;
						} else {
							return (com.google.protobuf.ByteString) ref;
						}
					}

					private void initFields() {
						attributes_ = java.util.Collections.emptyList();
						permission_ = "";
					}

					private byte memoizedIsInitialized = -1;

					@Override
					public final boolean isInitialized() {
						byte isInitialized = memoizedIsInitialized;
						if (isInitialized != -1)
							return isInitialized == 1;

						memoizedIsInitialized = 1;
						return true;
					}

					@Override
					public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
						getSerializedSize();
						for (int i = 0; i < attributes_.size(); i++) {
							output.writeMessage(1, attributes_.get(i));
						}
						if (((bitField0_ & 0x00000001) == 0x00000001)) {
							output.writeBytes(2, getPermissionBytes());
						}
						getUnknownFields().writeTo(output);
					}

					private int memoizedSerializedSize = -1;

					@Override
					public int getSerializedSize() {
						int size = memoizedSerializedSize;
						if (size != -1)
							return size;

						size = 0;
						for (int i = 0; i < attributes_.size(); i++) {
							size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, attributes_.get(i));
						}
						if (((bitField0_ & 0x00000001) == 0x00000001)) {
							size += com.google.protobuf.CodedOutputStream.computeBytesSize(2, getPermissionBytes());
						}
						size += getUnknownFields().getSerializedSize();
						memoizedSerializedSize = size;
						return size;
					}

					private static final long serialVersionUID = 0L;

					@java.lang.Override
					protected java.lang.Object writeReplace() throws java.io.ObjectStreamException {
						return super.writeReplace();
					}

					public static Ic3Data.Application.Component.ExitPoint.Intent parseFrom(
							com.google.protobuf.ByteString data)
							throws com.google.protobuf.InvalidProtocolBufferException {
						return PARSER.parseFrom(data);
					}

					public static Ic3Data.Application.Component.ExitPoint.Intent parseFrom(
							com.google.protobuf.ByteString data,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry)
							throws com.google.protobuf.InvalidProtocolBufferException {
						return PARSER.parseFrom(data, extensionRegistry);
					}

					public static Ic3Data.Application.Component.ExitPoint.Intent parseFrom(byte[] data)
							throws com.google.protobuf.InvalidProtocolBufferException {
						return PARSER.parseFrom(data);
					}

					public static Ic3Data.Application.Component.ExitPoint.Intent parseFrom(byte[] data,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry)
							throws com.google.protobuf.InvalidProtocolBufferException {
						return PARSER.parseFrom(data, extensionRegistry);
					}

					public static Ic3Data.Application.Component.ExitPoint.Intent parseFrom(java.io.InputStream input)
							throws java.io.IOException {
						return PARSER.parseFrom(input);
					}

					public static Ic3Data.Application.Component.ExitPoint.Intent parseFrom(java.io.InputStream input,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
						return PARSER.parseFrom(input, extensionRegistry);
					}

					public static Ic3Data.Application.Component.ExitPoint.Intent parseDelimitedFrom(
							java.io.InputStream input) throws java.io.IOException {
						return PARSER.parseDelimitedFrom(input);
					}

					public static Ic3Data.Application.Component.ExitPoint.Intent parseDelimitedFrom(
							java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
							throws java.io.IOException {
						return PARSER.parseDelimitedFrom(input, extensionRegistry);
					}

					public static Ic3Data.Application.Component.ExitPoint.Intent parseFrom(
							com.google.protobuf.CodedInputStream input) throws java.io.IOException {
						return PARSER.parseFrom(input);
					}

					public static Ic3Data.Application.Component.ExitPoint.Intent parseFrom(
							com.google.protobuf.CodedInputStream input,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
						return PARSER.parseFrom(input, extensionRegistry);
					}

					public static Builder newBuilder() {
						return Builder.create();
					}

					@Override
					public Builder newBuilderForType() {
						return newBuilder();
					}

					public static Builder newBuilder(Ic3Data.Application.Component.ExitPoint.Intent prototype) {
						return newBuilder().mergeFrom(prototype);
					}

					@Override
					public Builder toBuilder() {
						return newBuilder(this);
					}

					@java.lang.Override
					protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
						Builder builder = new Builder(parent);
						return builder;
					}

					/**
					 * Protobuf type
					 * {@code edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent}
					 */
					public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder>
							implements Ic3Data.Application.Component.ExitPoint.IntentOrBuilder {
						public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
							return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Intent_descriptor;
						}

						@Override
						protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
							return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Intent_fieldAccessorTable
									.ensureFieldAccessorsInitialized(
											Ic3Data.Application.Component.ExitPoint.Intent.class,
											Ic3Data.Application.Component.ExitPoint.Intent.Builder.class);
						}

						// Construct using Ic3Data.Application.Component.ExitPoint.Intent.newBuilder()
						private Builder() {
							maybeForceBuilderInitialization();
						}

						private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
							super(parent);
							maybeForceBuilderInitialization();
						}

						private void maybeForceBuilderInitialization() {
							if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
								getAttributesFieldBuilder();
							}
						}

						private static Builder create() {
							return new Builder();
						}

						@Override
						public Builder clear() {
							super.clear();
							if (attributesBuilder_ == null) {
								attributes_ = java.util.Collections.emptyList();
								bitField0_ = (bitField0_ & ~0x00000001);
							} else {
								attributesBuilder_.clear();
							}
							permission_ = "";
							bitField0_ = (bitField0_ & ~0x00000002);
							return this;
						}

						@Override
						public Builder clone() {
							return create().mergeFrom(buildPartial());
						}

						@Override
						public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
							return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Intent_descriptor;
						}

						@Override
						public Ic3Data.Application.Component.ExitPoint.Intent getDefaultInstanceForType() {
							return Ic3Data.Application.Component.ExitPoint.Intent.getDefaultInstance();
						}

						@Override
						public Ic3Data.Application.Component.ExitPoint.Intent build() {
							Ic3Data.Application.Component.ExitPoint.Intent result = buildPartial();
							if (!result.isInitialized()) {
								throw newUninitializedMessageException(result);
							}
							return result;
						}

						@Override
						public Ic3Data.Application.Component.ExitPoint.Intent buildPartial() {
							Ic3Data.Application.Component.ExitPoint.Intent result = new Ic3Data.Application.Component.ExitPoint.Intent(
									this);
							int from_bitField0_ = bitField0_;
							int to_bitField0_ = 0;
							if (attributesBuilder_ == null) {
								if (((bitField0_ & 0x00000001) == 0x00000001)) {
									attributes_ = java.util.Collections.unmodifiableList(attributes_);
									bitField0_ = (bitField0_ & ~0x00000001);
								}
								result.attributes_ = attributes_;
							} else {
								result.attributes_ = attributesBuilder_.build();
							}
							if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
								to_bitField0_ |= 0x00000001;
							}
							result.permission_ = permission_;
							result.bitField0_ = to_bitField0_;
							onBuilt();
							return result;
						}

						@Override
						public Builder mergeFrom(com.google.protobuf.Message other) {
							if (other instanceof Ic3Data.Application.Component.ExitPoint.Intent) {
								return mergeFrom((Ic3Data.Application.Component.ExitPoint.Intent) other);
							} else {
								super.mergeFrom(other);
								return this;
							}
						}

						public Builder mergeFrom(Ic3Data.Application.Component.ExitPoint.Intent other) {
							if (other == Ic3Data.Application.Component.ExitPoint.Intent.getDefaultInstance())
								return this;
							if (attributesBuilder_ == null) {
								if (!other.attributes_.isEmpty()) {
									if (attributes_.isEmpty()) {
										attributes_ = other.attributes_;
										bitField0_ = (bitField0_ & ~0x00000001);
									} else {
										ensureAttributesIsMutable();
										attributes_.addAll(other.attributes_);
									}
									onChanged();
								}
							} else {
								if (!other.attributes_.isEmpty()) {
									if (attributesBuilder_.isEmpty()) {
										attributesBuilder_.dispose();
										attributesBuilder_ = null;
										attributes_ = other.attributes_;
										bitField0_ = (bitField0_ & ~0x00000001);
										attributesBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders
												? getAttributesFieldBuilder()
												: null;
									} else {
										attributesBuilder_.addAllMessages(other.attributes_);
									}
								}
							}
							if (other.hasPermission()) {
								bitField0_ |= 0x00000002;
								permission_ = other.permission_;
								onChanged();
							}
							this.mergeUnknownFields(other.getUnknownFields());
							return this;
						}

						@Override
						public final boolean isInitialized() {
							return true;
						}

						@Override
						public Builder mergeFrom(com.google.protobuf.CodedInputStream input,
								com.google.protobuf.ExtensionRegistryLite extensionRegistry)
								throws java.io.IOException {
							Ic3Data.Application.Component.ExitPoint.Intent parsedMessage = null;
							try {
								parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
							} catch (com.google.protobuf.InvalidProtocolBufferException e) {
								parsedMessage = (Ic3Data.Application.Component.ExitPoint.Intent) e
										.getUnfinishedMessage();
								throw e;
							} finally {
								if (parsedMessage != null) {
									mergeFrom(parsedMessage);
								}
							}
							return this;
						}

						private int bitField0_;

						// repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;
						private java.util.List<Ic3Data.Attribute> attributes_ = java.util.Collections.emptyList();

						private void ensureAttributesIsMutable() {
							if (!((bitField0_ & 0x00000001) == 0x00000001)) {
								attributes_ = new java.util.ArrayList<Ic3Data.Attribute>(attributes_);
								bitField0_ |= 0x00000001;
							}
						}

						private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Attribute, Ic3Data.Attribute.Builder, Ic3Data.AttributeOrBuilder> attributesBuilder_;

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						@Override
						public java.util.List<Ic3Data.Attribute> getAttributesList() {
							if (attributesBuilder_ == null) {
								return java.util.Collections.unmodifiableList(attributes_);
							} else {
								return attributesBuilder_.getMessageList();
							}
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						@Override
						public int getAttributesCount() {
							if (attributesBuilder_ == null) {
								return attributes_.size();
							} else {
								return attributesBuilder_.getCount();
							}
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						@Override
						public Ic3Data.Attribute getAttributes(int index) {
							if (attributesBuilder_ == null) {
								return attributes_.get(index);
							} else {
								return attributesBuilder_.getMessage(index);
							}
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder setAttributes(int index, Ic3Data.Attribute value) {
							if (attributesBuilder_ == null) {
								if (value == null) {
									throw new NullPointerException();
								}
								ensureAttributesIsMutable();
								attributes_.set(index, value);
								onChanged();
							} else {
								attributesBuilder_.setMessage(index, value);
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder setAttributes(int index, Ic3Data.Attribute.Builder builderForValue) {
							if (attributesBuilder_ == null) {
								ensureAttributesIsMutable();
								attributes_.set(index, builderForValue.build());
								onChanged();
							} else {
								attributesBuilder_.setMessage(index, builderForValue.build());
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder addAttributes(Ic3Data.Attribute value) {
							if (attributesBuilder_ == null) {
								if (value == null) {
									throw new NullPointerException();
								}
								ensureAttributesIsMutable();
								attributes_.add(value);
								onChanged();
							} else {
								attributesBuilder_.addMessage(value);
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder addAttributes(int index, Ic3Data.Attribute value) {
							if (attributesBuilder_ == null) {
								if (value == null) {
									throw new NullPointerException();
								}
								ensureAttributesIsMutable();
								attributes_.add(index, value);
								onChanged();
							} else {
								attributesBuilder_.addMessage(index, value);
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder addAttributes(Ic3Data.Attribute.Builder builderForValue) {
							if (attributesBuilder_ == null) {
								ensureAttributesIsMutable();
								attributes_.add(builderForValue.build());
								onChanged();
							} else {
								attributesBuilder_.addMessage(builderForValue.build());
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder addAttributes(int index, Ic3Data.Attribute.Builder builderForValue) {
							if (attributesBuilder_ == null) {
								ensureAttributesIsMutable();
								attributes_.add(index, builderForValue.build());
								onChanged();
							} else {
								attributesBuilder_.addMessage(index, builderForValue.build());
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder addAllAttributes(java.lang.Iterable<? extends Ic3Data.Attribute> values) {
							if (attributesBuilder_ == null) {
								ensureAttributesIsMutable();
								super.addAll(values, attributes_);
								onChanged();
							} else {
								attributesBuilder_.addAllMessages(values);
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder clearAttributes() {
							if (attributesBuilder_ == null) {
								attributes_ = java.util.Collections.emptyList();
								bitField0_ = (bitField0_ & ~0x00000001);
								onChanged();
							} else {
								attributesBuilder_.clear();
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder removeAttributes(int index) {
							if (attributesBuilder_ == null) {
								ensureAttributesIsMutable();
								attributes_.remove(index);
								onChanged();
							} else {
								attributesBuilder_.remove(index);
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Ic3Data.Attribute.Builder getAttributesBuilder(int index) {
							return getAttributesFieldBuilder().getBuilder(index);
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						@Override
						public Ic3Data.AttributeOrBuilder getAttributesOrBuilder(int index) {
							if (attributesBuilder_ == null) {
								return attributes_.get(index);
							} else {
								return attributesBuilder_.getMessageOrBuilder(index);
							}
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						@Override
						public java.util.List<? extends Ic3Data.AttributeOrBuilder> getAttributesOrBuilderList() {
							if (attributesBuilder_ != null) {
								return attributesBuilder_.getMessageOrBuilderList();
							} else {
								return java.util.Collections.unmodifiableList(attributes_);
							}
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Ic3Data.Attribute.Builder addAttributesBuilder() {
							return getAttributesFieldBuilder().addBuilder(Ic3Data.Attribute.getDefaultInstance());
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Ic3Data.Attribute.Builder addAttributesBuilder(int index) {
							return getAttributesFieldBuilder().addBuilder(index,
									Ic3Data.Attribute.getDefaultInstance());
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public java.util.List<Ic3Data.Attribute.Builder> getAttributesBuilderList() {
							return getAttributesFieldBuilder().getBuilderList();
						}

						private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Attribute, Ic3Data.Attribute.Builder, Ic3Data.AttributeOrBuilder> getAttributesFieldBuilder() {
							if (attributesBuilder_ == null) {
								attributesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Attribute, Ic3Data.Attribute.Builder, Ic3Data.AttributeOrBuilder>(
										attributes_, ((bitField0_ & 0x00000001) == 0x00000001), getParentForChildren(),
										isClean());
								attributes_ = null;
							}
							return attributesBuilder_;
						}

						// optional string permission = 2;
						private java.lang.Object permission_ = "";

						/**
						 * <code>optional string permission = 2;</code>
						 */
						@Override
						public boolean hasPermission() {
							return ((bitField0_ & 0x00000002) == 0x00000002);
						}

						/**
						 * <code>optional string permission = 2;</code>
						 */
						@Override
						public java.lang.String getPermission() {
							java.lang.Object ref = permission_;
							if (!(ref instanceof java.lang.String)) {
								java.lang.String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
								permission_ = s;
								return s;
							} else {
								return (java.lang.String) ref;
							}
						}

						/**
						 * <code>optional string permission = 2;</code>
						 */
						@Override
						public com.google.protobuf.ByteString getPermissionBytes() {
							java.lang.Object ref = permission_;
							if (ref instanceof String) {
								com.google.protobuf.ByteString b = com.google.protobuf.ByteString
										.copyFromUtf8((java.lang.String) ref);
								permission_ = b;
								return b;
							} else {
								return (com.google.protobuf.ByteString) ref;
							}
						}

						/**
						 * <code>optional string permission = 2;</code>
						 */
						public Builder setPermission(java.lang.String value) {
							if (value == null) {
								throw new NullPointerException();
							}
							bitField0_ |= 0x00000002;
							permission_ = value;
							onChanged();
							return this;
						}

						/**
						 * <code>optional string permission = 2;</code>
						 */
						public Builder clearPermission() {
							bitField0_ = (bitField0_ & ~0x00000002);
							permission_ = getDefaultInstance().getPermission();
							onChanged();
							return this;
						}

						/**
						 * <code>optional string permission = 2;</code>
						 */
						public Builder setPermissionBytes(com.google.protobuf.ByteString value) {
							if (value == null) {
								throw new NullPointerException();
							}
							bitField0_ |= 0x00000002;
							permission_ = value;
							onChanged();
							return this;
						}

						// @@protoc_insertion_point(builder_scope:edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent)
					}

					static {
						defaultInstance = new Intent(true);
						defaultInstance.initFields();
					}

					// @@protoc_insertion_point(class_scope:edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent)
				}

				public interface UriOrBuilder extends com.google.protobuf.MessageOrBuilder {

					// repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;
					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					java.util.List<Ic3Data.Attribute> getAttributesList();

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					Ic3Data.Attribute getAttributes(int index);

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					int getAttributesCount();

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					java.util.List<? extends Ic3Data.AttributeOrBuilder> getAttributesOrBuilderList();

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					Ic3Data.AttributeOrBuilder getAttributesOrBuilder(int index);
				}

				/**
				 * Protobuf type
				 * {@code edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri}
				 */
				public static final class Uri extends com.google.protobuf.GeneratedMessage implements UriOrBuilder {
					// Use Uri.newBuilder() to construct.
					private Uri(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
						super(builder);
						this.unknownFields = builder.getUnknownFields();
					}

					private Uri(boolean noInit) {
						this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance();
					}

					private static final Uri defaultInstance;

					public static Uri getDefaultInstance() {
						return defaultInstance;
					}

					@Override
					public Uri getDefaultInstanceForType() {
						return defaultInstance;
					}

					private final com.google.protobuf.UnknownFieldSet unknownFields;

					@java.lang.Override
					public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
						return this.unknownFields;
					}

					private Uri(com.google.protobuf.CodedInputStream input,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry)
							throws com.google.protobuf.InvalidProtocolBufferException {
						initFields();
						int mutable_bitField0_ = 0;
						com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet
								.newBuilder();
						try {
							boolean done = false;
							while (!done) {
								int tag = input.readTag();
								switch (tag) {
								case 0:
									done = true;
									break;
								default: {
									if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
										done = true;
									}
									break;
								}
								case 10: {
									if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
										attributes_ = new java.util.ArrayList<Ic3Data.Attribute>();
										mutable_bitField0_ |= 0x00000001;
									}
									attributes_.add(input.readMessage(Ic3Data.Attribute.PARSER, extensionRegistry));
									break;
								}
								}
							}
						} catch (com.google.protobuf.InvalidProtocolBufferException e) {
							throw e.setUnfinishedMessage(this);
						} catch (java.io.IOException e) {
							throw new com.google.protobuf.InvalidProtocolBufferException(e.getMessage())
									.setUnfinishedMessage(this);
						} finally {
							if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
								attributes_ = java.util.Collections.unmodifiableList(attributes_);
							}
							this.unknownFields = unknownFields.build();
							makeExtensionsImmutable();
						}
					}

					public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
						return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Uri_descriptor;
					}

					@Override
					protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
						return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Uri_fieldAccessorTable
								.ensureFieldAccessorsInitialized(Ic3Data.Application.Component.ExitPoint.Uri.class,
										Ic3Data.Application.Component.ExitPoint.Uri.Builder.class);
					}

					public static com.google.protobuf.Parser<Uri> PARSER = new com.google.protobuf.AbstractParser<Uri>() {
						@Override
						public Uri parsePartialFrom(com.google.protobuf.CodedInputStream input,
								com.google.protobuf.ExtensionRegistryLite extensionRegistry)
								throws com.google.protobuf.InvalidProtocolBufferException {
							return new Uri(input, extensionRegistry);
						}
					};

					@java.lang.Override
					public com.google.protobuf.Parser<Uri> getParserForType() {
						return PARSER;
					}

					// repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;
					public static final int ATTRIBUTES_FIELD_NUMBER = 1;
					private java.util.List<Ic3Data.Attribute> attributes_;

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					@Override
					public java.util.List<Ic3Data.Attribute> getAttributesList() {
						return attributes_;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					@Override
					public java.util.List<? extends Ic3Data.AttributeOrBuilder> getAttributesOrBuilderList() {
						return attributes_;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					@Override
					public int getAttributesCount() {
						return attributes_.size();
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					@Override
					public Ic3Data.Attribute getAttributes(int index) {
						return attributes_.get(index);
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
					 */
					@Override
					public Ic3Data.AttributeOrBuilder getAttributesOrBuilder(int index) {
						return attributes_.get(index);
					}

					private void initFields() {
						attributes_ = java.util.Collections.emptyList();
					}

					private byte memoizedIsInitialized = -1;

					@Override
					public final boolean isInitialized() {
						byte isInitialized = memoizedIsInitialized;
						if (isInitialized != -1)
							return isInitialized == 1;

						memoizedIsInitialized = 1;
						return true;
					}

					@Override
					public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
						getSerializedSize();
						for (int i = 0; i < attributes_.size(); i++) {
							output.writeMessage(1, attributes_.get(i));
						}
						getUnknownFields().writeTo(output);
					}

					private int memoizedSerializedSize = -1;

					@Override
					public int getSerializedSize() {
						int size = memoizedSerializedSize;
						if (size != -1)
							return size;

						size = 0;
						for (int i = 0; i < attributes_.size(); i++) {
							size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, attributes_.get(i));
						}
						size += getUnknownFields().getSerializedSize();
						memoizedSerializedSize = size;
						return size;
					}

					private static final long serialVersionUID = 0L;

					@java.lang.Override
					protected java.lang.Object writeReplace() throws java.io.ObjectStreamException {
						return super.writeReplace();
					}

					public static Ic3Data.Application.Component.ExitPoint.Uri parseFrom(
							com.google.protobuf.ByteString data)
							throws com.google.protobuf.InvalidProtocolBufferException {
						return PARSER.parseFrom(data);
					}

					public static Ic3Data.Application.Component.ExitPoint.Uri parseFrom(
							com.google.protobuf.ByteString data,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry)
							throws com.google.protobuf.InvalidProtocolBufferException {
						return PARSER.parseFrom(data, extensionRegistry);
					}

					public static Ic3Data.Application.Component.ExitPoint.Uri parseFrom(byte[] data)
							throws com.google.protobuf.InvalidProtocolBufferException {
						return PARSER.parseFrom(data);
					}

					public static Ic3Data.Application.Component.ExitPoint.Uri parseFrom(byte[] data,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry)
							throws com.google.protobuf.InvalidProtocolBufferException {
						return PARSER.parseFrom(data, extensionRegistry);
					}

					public static Ic3Data.Application.Component.ExitPoint.Uri parseFrom(java.io.InputStream input)
							throws java.io.IOException {
						return PARSER.parseFrom(input);
					}

					public static Ic3Data.Application.Component.ExitPoint.Uri parseFrom(java.io.InputStream input,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
						return PARSER.parseFrom(input, extensionRegistry);
					}

					public static Ic3Data.Application.Component.ExitPoint.Uri parseDelimitedFrom(
							java.io.InputStream input) throws java.io.IOException {
						return PARSER.parseDelimitedFrom(input);
					}

					public static Ic3Data.Application.Component.ExitPoint.Uri parseDelimitedFrom(
							java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
							throws java.io.IOException {
						return PARSER.parseDelimitedFrom(input, extensionRegistry);
					}

					public static Ic3Data.Application.Component.ExitPoint.Uri parseFrom(
							com.google.protobuf.CodedInputStream input) throws java.io.IOException {
						return PARSER.parseFrom(input);
					}

					public static Ic3Data.Application.Component.ExitPoint.Uri parseFrom(
							com.google.protobuf.CodedInputStream input,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
						return PARSER.parseFrom(input, extensionRegistry);
					}

					public static Builder newBuilder() {
						return Builder.create();
					}

					@Override
					public Builder newBuilderForType() {
						return newBuilder();
					}

					public static Builder newBuilder(Ic3Data.Application.Component.ExitPoint.Uri prototype) {
						return newBuilder().mergeFrom(prototype);
					}

					@Override
					public Builder toBuilder() {
						return newBuilder(this);
					}

					@java.lang.Override
					protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
						Builder builder = new Builder(parent);
						return builder;
					}

					/**
					 * Protobuf type
					 * {@code edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri}
					 */
					public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder>
							implements Ic3Data.Application.Component.ExitPoint.UriOrBuilder {
						public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
							return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Uri_descriptor;
						}

						@Override
						protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
							return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Uri_fieldAccessorTable
									.ensureFieldAccessorsInitialized(Ic3Data.Application.Component.ExitPoint.Uri.class,
											Ic3Data.Application.Component.ExitPoint.Uri.Builder.class);
						}

						// Construct using Ic3Data.Application.Component.ExitPoint.Uri.newBuilder()
						private Builder() {
							maybeForceBuilderInitialization();
						}

						private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
							super(parent);
							maybeForceBuilderInitialization();
						}

						private void maybeForceBuilderInitialization() {
							if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
								getAttributesFieldBuilder();
							}
						}

						private static Builder create() {
							return new Builder();
						}

						@Override
						public Builder clear() {
							super.clear();
							if (attributesBuilder_ == null) {
								attributes_ = java.util.Collections.emptyList();
								bitField0_ = (bitField0_ & ~0x00000001);
							} else {
								attributesBuilder_.clear();
							}
							return this;
						}

						@Override
						public Builder clone() {
							return create().mergeFrom(buildPartial());
						}

						@Override
						public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
							return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Uri_descriptor;
						}

						@Override
						public Ic3Data.Application.Component.ExitPoint.Uri getDefaultInstanceForType() {
							return Ic3Data.Application.Component.ExitPoint.Uri.getDefaultInstance();
						}

						@Override
						public Ic3Data.Application.Component.ExitPoint.Uri build() {
							Ic3Data.Application.Component.ExitPoint.Uri result = buildPartial();
							if (!result.isInitialized()) {
								throw newUninitializedMessageException(result);
							}
							return result;
						}

						@Override
						public Ic3Data.Application.Component.ExitPoint.Uri buildPartial() {
							Ic3Data.Application.Component.ExitPoint.Uri result = new Ic3Data.Application.Component.ExitPoint.Uri(
									this);
							int from_bitField0_ = bitField0_;
							if (attributesBuilder_ == null) {
								if (((bitField0_ & 0x00000001) == 0x00000001)) {
									attributes_ = java.util.Collections.unmodifiableList(attributes_);
									bitField0_ = (bitField0_ & ~0x00000001);
								}
								result.attributes_ = attributes_;
							} else {
								result.attributes_ = attributesBuilder_.build();
							}
							onBuilt();
							return result;
						}

						@Override
						public Builder mergeFrom(com.google.protobuf.Message other) {
							if (other instanceof Ic3Data.Application.Component.ExitPoint.Uri) {
								return mergeFrom((Ic3Data.Application.Component.ExitPoint.Uri) other);
							} else {
								super.mergeFrom(other);
								return this;
							}
						}

						public Builder mergeFrom(Ic3Data.Application.Component.ExitPoint.Uri other) {
							if (other == Ic3Data.Application.Component.ExitPoint.Uri.getDefaultInstance())
								return this;
							if (attributesBuilder_ == null) {
								if (!other.attributes_.isEmpty()) {
									if (attributes_.isEmpty()) {
										attributes_ = other.attributes_;
										bitField0_ = (bitField0_ & ~0x00000001);
									} else {
										ensureAttributesIsMutable();
										attributes_.addAll(other.attributes_);
									}
									onChanged();
								}
							} else {
								if (!other.attributes_.isEmpty()) {
									if (attributesBuilder_.isEmpty()) {
										attributesBuilder_.dispose();
										attributesBuilder_ = null;
										attributes_ = other.attributes_;
										bitField0_ = (bitField0_ & ~0x00000001);
										attributesBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders
												? getAttributesFieldBuilder()
												: null;
									} else {
										attributesBuilder_.addAllMessages(other.attributes_);
									}
								}
							}
							this.mergeUnknownFields(other.getUnknownFields());
							return this;
						}

						@Override
						public final boolean isInitialized() {
							return true;
						}

						@Override
						public Builder mergeFrom(com.google.protobuf.CodedInputStream input,
								com.google.protobuf.ExtensionRegistryLite extensionRegistry)
								throws java.io.IOException {
							Ic3Data.Application.Component.ExitPoint.Uri parsedMessage = null;
							try {
								parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
							} catch (com.google.protobuf.InvalidProtocolBufferException e) {
								parsedMessage = (Ic3Data.Application.Component.ExitPoint.Uri) e.getUnfinishedMessage();
								throw e;
							} finally {
								if (parsedMessage != null) {
									mergeFrom(parsedMessage);
								}
							}
							return this;
						}

						private int bitField0_;

						// repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;
						private java.util.List<Ic3Data.Attribute> attributes_ = java.util.Collections.emptyList();

						private void ensureAttributesIsMutable() {
							if (!((bitField0_ & 0x00000001) == 0x00000001)) {
								attributes_ = new java.util.ArrayList<Ic3Data.Attribute>(attributes_);
								bitField0_ |= 0x00000001;
							}
						}

						private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Attribute, Ic3Data.Attribute.Builder, Ic3Data.AttributeOrBuilder> attributesBuilder_;

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						@Override
						public java.util.List<Ic3Data.Attribute> getAttributesList() {
							if (attributesBuilder_ == null) {
								return java.util.Collections.unmodifiableList(attributes_);
							} else {
								return attributesBuilder_.getMessageList();
							}
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						@Override
						public int getAttributesCount() {
							if (attributesBuilder_ == null) {
								return attributes_.size();
							} else {
								return attributesBuilder_.getCount();
							}
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						@Override
						public Ic3Data.Attribute getAttributes(int index) {
							if (attributesBuilder_ == null) {
								return attributes_.get(index);
							} else {
								return attributesBuilder_.getMessage(index);
							}
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder setAttributes(int index, Ic3Data.Attribute value) {
							if (attributesBuilder_ == null) {
								if (value == null) {
									throw new NullPointerException();
								}
								ensureAttributesIsMutable();
								attributes_.set(index, value);
								onChanged();
							} else {
								attributesBuilder_.setMessage(index, value);
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder setAttributes(int index, Ic3Data.Attribute.Builder builderForValue) {
							if (attributesBuilder_ == null) {
								ensureAttributesIsMutable();
								attributes_.set(index, builderForValue.build());
								onChanged();
							} else {
								attributesBuilder_.setMessage(index, builderForValue.build());
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder addAttributes(Ic3Data.Attribute value) {
							if (attributesBuilder_ == null) {
								if (value == null) {
									throw new NullPointerException();
								}
								ensureAttributesIsMutable();
								attributes_.add(value);
								onChanged();
							} else {
								attributesBuilder_.addMessage(value);
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder addAttributes(int index, Ic3Data.Attribute value) {
							if (attributesBuilder_ == null) {
								if (value == null) {
									throw new NullPointerException();
								}
								ensureAttributesIsMutable();
								attributes_.add(index, value);
								onChanged();
							} else {
								attributesBuilder_.addMessage(index, value);
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder addAttributes(Ic3Data.Attribute.Builder builderForValue) {
							if (attributesBuilder_ == null) {
								ensureAttributesIsMutable();
								attributes_.add(builderForValue.build());
								onChanged();
							} else {
								attributesBuilder_.addMessage(builderForValue.build());
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder addAttributes(int index, Ic3Data.Attribute.Builder builderForValue) {
							if (attributesBuilder_ == null) {
								ensureAttributesIsMutable();
								attributes_.add(index, builderForValue.build());
								onChanged();
							} else {
								attributesBuilder_.addMessage(index, builderForValue.build());
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder addAllAttributes(java.lang.Iterable<? extends Ic3Data.Attribute> values) {
							if (attributesBuilder_ == null) {
								ensureAttributesIsMutable();
								super.addAll(values, attributes_);
								onChanged();
							} else {
								attributesBuilder_.addAllMessages(values);
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder clearAttributes() {
							if (attributesBuilder_ == null) {
								attributes_ = java.util.Collections.emptyList();
								bitField0_ = (bitField0_ & ~0x00000001);
								onChanged();
							} else {
								attributesBuilder_.clear();
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Builder removeAttributes(int index) {
							if (attributesBuilder_ == null) {
								ensureAttributesIsMutable();
								attributes_.remove(index);
								onChanged();
							} else {
								attributesBuilder_.remove(index);
							}
							return this;
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Ic3Data.Attribute.Builder getAttributesBuilder(int index) {
							return getAttributesFieldBuilder().getBuilder(index);
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						@Override
						public Ic3Data.AttributeOrBuilder getAttributesOrBuilder(int index) {
							if (attributesBuilder_ == null) {
								return attributes_.get(index);
							} else {
								return attributesBuilder_.getMessageOrBuilder(index);
							}
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						@Override
						public java.util.List<? extends Ic3Data.AttributeOrBuilder> getAttributesOrBuilderList() {
							if (attributesBuilder_ != null) {
								return attributesBuilder_.getMessageOrBuilderList();
							} else {
								return java.util.Collections.unmodifiableList(attributes_);
							}
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Ic3Data.Attribute.Builder addAttributesBuilder() {
							return getAttributesFieldBuilder().addBuilder(Ic3Data.Attribute.getDefaultInstance());
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public Ic3Data.Attribute.Builder addAttributesBuilder(int index) {
							return getAttributesFieldBuilder().addBuilder(index,
									Ic3Data.Attribute.getDefaultInstance());
						}

						/**
						 * <code>repeated .edu.psu.cse.siis.ic3.Attribute attributes = 1;</code>
						 */
						public java.util.List<Ic3Data.Attribute.Builder> getAttributesBuilderList() {
							return getAttributesFieldBuilder().getBuilderList();
						}

						private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Attribute, Ic3Data.Attribute.Builder, Ic3Data.AttributeOrBuilder> getAttributesFieldBuilder() {
							if (attributesBuilder_ == null) {
								attributesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Attribute, Ic3Data.Attribute.Builder, Ic3Data.AttributeOrBuilder>(
										attributes_, ((bitField0_ & 0x00000001) == 0x00000001), getParentForChildren(),
										isClean());
								attributes_ = null;
							}
							return attributesBuilder_;
						}

						// @@protoc_insertion_point(builder_scope:edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri)
					}

					static {
						defaultInstance = new Uri(true);
						defaultInstance.initFields();
					}

					// @@protoc_insertion_point(class_scope:edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri)
				}

				private int bitField0_;
				// optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction
				// = 1;
				public static final int INSTRUCTION_FIELD_NUMBER = 1;
				private Ic3Data.Application.Component.Instruction instruction_;

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 1;</code>
				 */
				@Override
				public boolean hasInstruction() {
					return ((bitField0_ & 0x00000001) == 0x00000001);
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 1;</code>
				 */
				@Override
				public Ic3Data.Application.Component.Instruction getInstruction() {
					return instruction_;
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 1;</code>
				 */
				@Override
				public Ic3Data.Application.Component.InstructionOrBuilder getInstructionOrBuilder() {
					return instruction_;
				}

				// optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;
				public static final int KIND_FIELD_NUMBER = 2;
				private Ic3Data.Application.Component.ComponentKind kind_;

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;</code>
				 */
				@Override
				public boolean hasKind() {
					return ((bitField0_ & 0x00000002) == 0x00000002);
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;</code>
				 */
				@Override
				public Ic3Data.Application.Component.ComponentKind getKind() {
					return kind_;
				}

				// optional uint32 missing = 3;
				public static final int MISSING_FIELD_NUMBER = 3;
				private int missing_;

				/**
				 * <code>optional uint32 missing = 3;</code>
				 */
				@Override
				public boolean hasMissing() {
					return ((bitField0_ & 0x00000004) == 0x00000004);
				}

				/**
				 * <code>optional uint32 missing = 3;</code>
				 */
				@Override
				public int getMissing() {
					return missing_;
				}

				// repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents
				// = 4;
				public static final int INTENTS_FIELD_NUMBER = 4;
				private java.util.List<Ic3Data.Application.Component.ExitPoint.Intent> intents_;

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
				 */
				@Override
				public java.util.List<Ic3Data.Application.Component.ExitPoint.Intent> getIntentsList() {
					return intents_;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
				 */
				@Override
				public java.util.List<? extends Ic3Data.Application.Component.ExitPoint.IntentOrBuilder> getIntentsOrBuilderList() {
					return intents_;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
				 */
				@Override
				public int getIntentsCount() {
					return intents_.size();
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
				 */
				@Override
				public Ic3Data.Application.Component.ExitPoint.Intent getIntents(int index) {
					return intents_.get(index);
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
				 */
				@Override
				public Ic3Data.Application.Component.ExitPoint.IntentOrBuilder getIntentsOrBuilder(int index) {
					return intents_.get(index);
				}

				// repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;
				public static final int URIS_FIELD_NUMBER = 5;
				private java.util.List<Ic3Data.Application.Component.ExitPoint.Uri> uris_;

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
				 */
				@Override
				public java.util.List<Ic3Data.Application.Component.ExitPoint.Uri> getUrisList() {
					return uris_;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
				 */
				@Override
				public java.util.List<? extends Ic3Data.Application.Component.ExitPoint.UriOrBuilder> getUrisOrBuilderList() {
					return uris_;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
				 */
				@Override
				public int getUrisCount() {
					return uris_.size();
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
				 */
				@Override
				public Ic3Data.Application.Component.ExitPoint.Uri getUris(int index) {
					return uris_.get(index);
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
				 */
				@Override
				public Ic3Data.Application.Component.ExitPoint.UriOrBuilder getUrisOrBuilder(int index) {
					return uris_.get(index);
				}

				private void initFields() {
					instruction_ = Ic3Data.Application.Component.Instruction.getDefaultInstance();
					kind_ = Ic3Data.Application.Component.ComponentKind.ACTIVITY;
					missing_ = 0;
					intents_ = java.util.Collections.emptyList();
					uris_ = java.util.Collections.emptyList();
				}

				private byte memoizedIsInitialized = -1;

				@Override
				public final boolean isInitialized() {
					byte isInitialized = memoizedIsInitialized;
					if (isInitialized != -1)
						return isInitialized == 1;

					memoizedIsInitialized = 1;
					return true;
				}

				@Override
				public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
					getSerializedSize();
					if (((bitField0_ & 0x00000001) == 0x00000001)) {
						output.writeMessage(1, instruction_);
					}
					if (((bitField0_ & 0x00000002) == 0x00000002)) {
						output.writeEnum(2, kind_.getNumber());
					}
					if (((bitField0_ & 0x00000004) == 0x00000004)) {
						output.writeUInt32(3, missing_);
					}
					for (int i = 0; i < intents_.size(); i++) {
						output.writeMessage(4, intents_.get(i));
					}
					for (int i = 0; i < uris_.size(); i++) {
						output.writeMessage(5, uris_.get(i));
					}
					getUnknownFields().writeTo(output);
				}

				private int memoizedSerializedSize = -1;

				@Override
				public int getSerializedSize() {
					int size = memoizedSerializedSize;
					if (size != -1)
						return size;

					size = 0;
					if (((bitField0_ & 0x00000001) == 0x00000001)) {
						size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, instruction_);
					}
					if (((bitField0_ & 0x00000002) == 0x00000002)) {
						size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, kind_.getNumber());
					}
					if (((bitField0_ & 0x00000004) == 0x00000004)) {
						size += com.google.protobuf.CodedOutputStream.computeUInt32Size(3, missing_);
					}
					for (int i = 0; i < intents_.size(); i++) {
						size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, intents_.get(i));
					}
					for (int i = 0; i < uris_.size(); i++) {
						size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, uris_.get(i));
					}
					size += getUnknownFields().getSerializedSize();
					memoizedSerializedSize = size;
					return size;
				}

				private static final long serialVersionUID = 0L;

				@java.lang.Override
				protected java.lang.Object writeReplace() throws java.io.ObjectStreamException {
					return super.writeReplace();
				}

				public static Ic3Data.Application.Component.ExitPoint parseFrom(com.google.protobuf.ByteString data)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return PARSER.parseFrom(data);
				}

				public static Ic3Data.Application.Component.ExitPoint parseFrom(com.google.protobuf.ByteString data,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return PARSER.parseFrom(data, extensionRegistry);
				}

				public static Ic3Data.Application.Component.ExitPoint parseFrom(byte[] data)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return PARSER.parseFrom(data);
				}

				public static Ic3Data.Application.Component.ExitPoint parseFrom(byte[] data,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry)
						throws com.google.protobuf.InvalidProtocolBufferException {
					return PARSER.parseFrom(data, extensionRegistry);
				}

				public static Ic3Data.Application.Component.ExitPoint parseFrom(java.io.InputStream input)
						throws java.io.IOException {
					return PARSER.parseFrom(input);
				}

				public static Ic3Data.Application.Component.ExitPoint parseFrom(java.io.InputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
					return PARSER.parseFrom(input, extensionRegistry);
				}

				public static Ic3Data.Application.Component.ExitPoint parseDelimitedFrom(java.io.InputStream input)
						throws java.io.IOException {
					return PARSER.parseDelimitedFrom(input);
				}

				public static Ic3Data.Application.Component.ExitPoint parseDelimitedFrom(java.io.InputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
					return PARSER.parseDelimitedFrom(input, extensionRegistry);
				}

				public static Ic3Data.Application.Component.ExitPoint parseFrom(
						com.google.protobuf.CodedInputStream input) throws java.io.IOException {
					return PARSER.parseFrom(input);
				}

				public static Ic3Data.Application.Component.ExitPoint parseFrom(
						com.google.protobuf.CodedInputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
					return PARSER.parseFrom(input, extensionRegistry);
				}

				public static Builder newBuilder() {
					return Builder.create();
				}

				@Override
				public Builder newBuilderForType() {
					return newBuilder();
				}

				public static Builder newBuilder(Ic3Data.Application.Component.ExitPoint prototype) {
					return newBuilder().mergeFrom(prototype);
				}

				@Override
				public Builder toBuilder() {
					return newBuilder(this);
				}

				@java.lang.Override
				protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
					Builder builder = new Builder(parent);
					return builder;
				}

				/**
				 * Protobuf type {@code edu.psu.cse.siis.ic3.Application.Component.ExitPoint}
				 */
				public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder>
						implements Ic3Data.Application.Component.ExitPointOrBuilder {
					public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
						return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_descriptor;
					}

					@Override
					protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
						return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_fieldAccessorTable
								.ensureFieldAccessorsInitialized(Ic3Data.Application.Component.ExitPoint.class,
										Ic3Data.Application.Component.ExitPoint.Builder.class);
					}

					// Construct using Ic3Data.Application.Component.ExitPoint.newBuilder()
					private Builder() {
						maybeForceBuilderInitialization();
					}

					private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
						super(parent);
						maybeForceBuilderInitialization();
					}

					private void maybeForceBuilderInitialization() {
						if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
							getInstructionFieldBuilder();
							getIntentsFieldBuilder();
							getUrisFieldBuilder();
						}
					}

					private static Builder create() {
						return new Builder();
					}

					@Override
					public Builder clear() {
						super.clear();
						if (instructionBuilder_ == null) {
							instruction_ = Ic3Data.Application.Component.Instruction.getDefaultInstance();
						} else {
							instructionBuilder_.clear();
						}
						bitField0_ = (bitField0_ & ~0x00000001);
						kind_ = Ic3Data.Application.Component.ComponentKind.ACTIVITY;
						bitField0_ = (bitField0_ & ~0x00000002);
						missing_ = 0;
						bitField0_ = (bitField0_ & ~0x00000004);
						if (intentsBuilder_ == null) {
							intents_ = java.util.Collections.emptyList();
							bitField0_ = (bitField0_ & ~0x00000008);
						} else {
							intentsBuilder_.clear();
						}
						if (urisBuilder_ == null) {
							uris_ = java.util.Collections.emptyList();
							bitField0_ = (bitField0_ & ~0x00000010);
						} else {
							urisBuilder_.clear();
						}
						return this;
					}

					@Override
					public Builder clone() {
						return create().mergeFrom(buildPartial());
					}

					@Override
					public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
						return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_descriptor;
					}

					@Override
					public Ic3Data.Application.Component.ExitPoint getDefaultInstanceForType() {
						return Ic3Data.Application.Component.ExitPoint.getDefaultInstance();
					}

					@Override
					public Ic3Data.Application.Component.ExitPoint build() {
						Ic3Data.Application.Component.ExitPoint result = buildPartial();
						if (!result.isInitialized()) {
							throw newUninitializedMessageException(result);
						}
						return result;
					}

					@Override
					public Ic3Data.Application.Component.ExitPoint buildPartial() {
						Ic3Data.Application.Component.ExitPoint result = new Ic3Data.Application.Component.ExitPoint(
								this);
						int from_bitField0_ = bitField0_;
						int to_bitField0_ = 0;
						if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
							to_bitField0_ |= 0x00000001;
						}
						if (instructionBuilder_ == null) {
							result.instruction_ = instruction_;
						} else {
							result.instruction_ = instructionBuilder_.build();
						}
						if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
							to_bitField0_ |= 0x00000002;
						}
						result.kind_ = kind_;
						if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
							to_bitField0_ |= 0x00000004;
						}
						result.missing_ = missing_;
						if (intentsBuilder_ == null) {
							if (((bitField0_ & 0x00000008) == 0x00000008)) {
								intents_ = java.util.Collections.unmodifiableList(intents_);
								bitField0_ = (bitField0_ & ~0x00000008);
							}
							result.intents_ = intents_;
						} else {
							result.intents_ = intentsBuilder_.build();
						}
						if (urisBuilder_ == null) {
							if (((bitField0_ & 0x00000010) == 0x00000010)) {
								uris_ = java.util.Collections.unmodifiableList(uris_);
								bitField0_ = (bitField0_ & ~0x00000010);
							}
							result.uris_ = uris_;
						} else {
							result.uris_ = urisBuilder_.build();
						}
						result.bitField0_ = to_bitField0_;
						onBuilt();
						return result;
					}

					@Override
					public Builder mergeFrom(com.google.protobuf.Message other) {
						if (other instanceof Ic3Data.Application.Component.ExitPoint) {
							return mergeFrom((Ic3Data.Application.Component.ExitPoint) other);
						} else {
							super.mergeFrom(other);
							return this;
						}
					}

					public Builder mergeFrom(Ic3Data.Application.Component.ExitPoint other) {
						if (other == Ic3Data.Application.Component.ExitPoint.getDefaultInstance())
							return this;
						if (other.hasInstruction()) {
							mergeInstruction(other.getInstruction());
						}
						if (other.hasKind()) {
							setKind(other.getKind());
						}
						if (other.hasMissing()) {
							setMissing(other.getMissing());
						}
						if (intentsBuilder_ == null) {
							if (!other.intents_.isEmpty()) {
								if (intents_.isEmpty()) {
									intents_ = other.intents_;
									bitField0_ = (bitField0_ & ~0x00000008);
								} else {
									ensureIntentsIsMutable();
									intents_.addAll(other.intents_);
								}
								onChanged();
							}
						} else {
							if (!other.intents_.isEmpty()) {
								if (intentsBuilder_.isEmpty()) {
									intentsBuilder_.dispose();
									intentsBuilder_ = null;
									intents_ = other.intents_;
									bitField0_ = (bitField0_ & ~0x00000008);
									intentsBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders
											? getIntentsFieldBuilder()
											: null;
								} else {
									intentsBuilder_.addAllMessages(other.intents_);
								}
							}
						}
						if (urisBuilder_ == null) {
							if (!other.uris_.isEmpty()) {
								if (uris_.isEmpty()) {
									uris_ = other.uris_;
									bitField0_ = (bitField0_ & ~0x00000010);
								} else {
									ensureUrisIsMutable();
									uris_.addAll(other.uris_);
								}
								onChanged();
							}
						} else {
							if (!other.uris_.isEmpty()) {
								if (urisBuilder_.isEmpty()) {
									urisBuilder_.dispose();
									urisBuilder_ = null;
									uris_ = other.uris_;
									bitField0_ = (bitField0_ & ~0x00000010);
									urisBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders
											? getUrisFieldBuilder()
											: null;
								} else {
									urisBuilder_.addAllMessages(other.uris_);
								}
							}
						}
						this.mergeUnknownFields(other.getUnknownFields());
						return this;
					}

					@Override
					public final boolean isInitialized() {
						return true;
					}

					@Override
					public Builder mergeFrom(com.google.protobuf.CodedInputStream input,
							com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
						Ic3Data.Application.Component.ExitPoint parsedMessage = null;
						try {
							parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
						} catch (com.google.protobuf.InvalidProtocolBufferException e) {
							parsedMessage = (Ic3Data.Application.Component.ExitPoint) e.getUnfinishedMessage();
							throw e;
						} finally {
							if (parsedMessage != null) {
								mergeFrom(parsedMessage);
							}
						}
						return this;
					}

					private int bitField0_;

					// optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction
					// = 1;
					private Ic3Data.Application.Component.Instruction instruction_ = Ic3Data.Application.Component.Instruction
							.getDefaultInstance();
					private com.google.protobuf.SingleFieldBuilder<Ic3Data.Application.Component.Instruction, Ic3Data.Application.Component.Instruction.Builder, Ic3Data.Application.Component.InstructionOrBuilder> instructionBuilder_;

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 1;</code>
					 */
					@Override
					public boolean hasInstruction() {
						return ((bitField0_ & 0x00000001) == 0x00000001);
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 1;</code>
					 */
					@Override
					public Ic3Data.Application.Component.Instruction getInstruction() {
						if (instructionBuilder_ == null) {
							return instruction_;
						} else {
							return instructionBuilder_.getMessage();
						}
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 1;</code>
					 */
					public Builder setInstruction(Ic3Data.Application.Component.Instruction value) {
						if (instructionBuilder_ == null) {
							if (value == null) {
								throw new NullPointerException();
							}
							instruction_ = value;
							onChanged();
						} else {
							instructionBuilder_.setMessage(value);
						}
						bitField0_ |= 0x00000001;
						return this;
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 1;</code>
					 */
					public Builder setInstruction(Ic3Data.Application.Component.Instruction.Builder builderForValue) {
						if (instructionBuilder_ == null) {
							instruction_ = builderForValue.build();
							onChanged();
						} else {
							instructionBuilder_.setMessage(builderForValue.build());
						}
						bitField0_ |= 0x00000001;
						return this;
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 1;</code>
					 */
					public Builder mergeInstruction(Ic3Data.Application.Component.Instruction value) {
						if (instructionBuilder_ == null) {
							if (((bitField0_ & 0x00000001) == 0x00000001)
									&& instruction_ != Ic3Data.Application.Component.Instruction.getDefaultInstance()) {
								instruction_ = Ic3Data.Application.Component.Instruction.newBuilder(instruction_)
										.mergeFrom(value).buildPartial();
							} else {
								instruction_ = value;
							}
							onChanged();
						} else {
							instructionBuilder_.mergeFrom(value);
						}
						bitField0_ |= 0x00000001;
						return this;
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 1;</code>
					 */
					public Builder clearInstruction() {
						if (instructionBuilder_ == null) {
							instruction_ = Ic3Data.Application.Component.Instruction.getDefaultInstance();
							onChanged();
						} else {
							instructionBuilder_.clear();
						}
						bitField0_ = (bitField0_ & ~0x00000001);
						return this;
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 1;</code>
					 */
					public Ic3Data.Application.Component.Instruction.Builder getInstructionBuilder() {
						bitField0_ |= 0x00000001;
						onChanged();
						return getInstructionFieldBuilder().getBuilder();
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 1;</code>
					 */
					@Override
					public Ic3Data.Application.Component.InstructionOrBuilder getInstructionOrBuilder() {
						if (instructionBuilder_ != null) {
							return instructionBuilder_.getMessageOrBuilder();
						} else {
							return instruction_;
						}
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction instruction = 1;</code>
					 */
					private com.google.protobuf.SingleFieldBuilder<Ic3Data.Application.Component.Instruction, Ic3Data.Application.Component.Instruction.Builder, Ic3Data.Application.Component.InstructionOrBuilder> getInstructionFieldBuilder() {
						if (instructionBuilder_ == null) {
							instructionBuilder_ = new com.google.protobuf.SingleFieldBuilder<Ic3Data.Application.Component.Instruction, Ic3Data.Application.Component.Instruction.Builder, Ic3Data.Application.Component.InstructionOrBuilder>(
									instruction_, getParentForChildren(), isClean());
							instruction_ = null;
						}
						return instructionBuilder_;
					}

					// optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;
					private Ic3Data.Application.Component.ComponentKind kind_ = Ic3Data.Application.Component.ComponentKind.ACTIVITY;

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;</code>
					 */
					@Override
					public boolean hasKind() {
						return ((bitField0_ & 0x00000002) == 0x00000002);
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;</code>
					 */
					@Override
					public Ic3Data.Application.Component.ComponentKind getKind() {
						return kind_;
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;</code>
					 */
					public Builder setKind(Ic3Data.Application.Component.ComponentKind value) {
						if (value == null) {
							throw new NullPointerException();
						}
						bitField0_ |= 0x00000002;
						kind_ = value;
						onChanged();
						return this;
					}

					/**
					 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;</code>
					 */
					public Builder clearKind() {
						bitField0_ = (bitField0_ & ~0x00000002);
						kind_ = Ic3Data.Application.Component.ComponentKind.ACTIVITY;
						onChanged();
						return this;
					}

					// optional uint32 missing = 3;
					private int missing_;

					/**
					 * <code>optional uint32 missing = 3;</code>
					 */
					@Override
					public boolean hasMissing() {
						return ((bitField0_ & 0x00000004) == 0x00000004);
					}

					/**
					 * <code>optional uint32 missing = 3;</code>
					 */
					@Override
					public int getMissing() {
						return missing_;
					}

					/**
					 * <code>optional uint32 missing = 3;</code>
					 */
					public Builder setMissing(int value) {
						bitField0_ |= 0x00000004;
						missing_ = value;
						onChanged();
						return this;
					}

					/**
					 * <code>optional uint32 missing = 3;</code>
					 */
					public Builder clearMissing() {
						bitField0_ = (bitField0_ & ~0x00000004);
						missing_ = 0;
						onChanged();
						return this;
					}

					// repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents
					// = 4;
					private java.util.List<Ic3Data.Application.Component.ExitPoint.Intent> intents_ = java.util.Collections
							.emptyList();

					private void ensureIntentsIsMutable() {
						if (!((bitField0_ & 0x00000008) == 0x00000008)) {
							intents_ = new java.util.ArrayList<Ic3Data.Application.Component.ExitPoint.Intent>(
									intents_);
							bitField0_ |= 0x00000008;
						}
					}

					private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component.ExitPoint.Intent, Ic3Data.Application.Component.ExitPoint.Intent.Builder, Ic3Data.Application.Component.ExitPoint.IntentOrBuilder> intentsBuilder_;

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					@Override
					public java.util.List<Ic3Data.Application.Component.ExitPoint.Intent> getIntentsList() {
						if (intentsBuilder_ == null) {
							return java.util.Collections.unmodifiableList(intents_);
						} else {
							return intentsBuilder_.getMessageList();
						}
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					@Override
					public int getIntentsCount() {
						if (intentsBuilder_ == null) {
							return intents_.size();
						} else {
							return intentsBuilder_.getCount();
						}
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					@Override
					public Ic3Data.Application.Component.ExitPoint.Intent getIntents(int index) {
						if (intentsBuilder_ == null) {
							return intents_.get(index);
						} else {
							return intentsBuilder_.getMessage(index);
						}
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					public Builder setIntents(int index, Ic3Data.Application.Component.ExitPoint.Intent value) {
						if (intentsBuilder_ == null) {
							if (value == null) {
								throw new NullPointerException();
							}
							ensureIntentsIsMutable();
							intents_.set(index, value);
							onChanged();
						} else {
							intentsBuilder_.setMessage(index, value);
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					public Builder setIntents(int index,
							Ic3Data.Application.Component.ExitPoint.Intent.Builder builderForValue) {
						if (intentsBuilder_ == null) {
							ensureIntentsIsMutable();
							intents_.set(index, builderForValue.build());
							onChanged();
						} else {
							intentsBuilder_.setMessage(index, builderForValue.build());
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					public Builder addIntents(Ic3Data.Application.Component.ExitPoint.Intent value) {
						if (intentsBuilder_ == null) {
							if (value == null) {
								throw new NullPointerException();
							}
							ensureIntentsIsMutable();
							intents_.add(value);
							onChanged();
						} else {
							intentsBuilder_.addMessage(value);
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					public Builder addIntents(int index, Ic3Data.Application.Component.ExitPoint.Intent value) {
						if (intentsBuilder_ == null) {
							if (value == null) {
								throw new NullPointerException();
							}
							ensureIntentsIsMutable();
							intents_.add(index, value);
							onChanged();
						} else {
							intentsBuilder_.addMessage(index, value);
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					public Builder addIntents(Ic3Data.Application.Component.ExitPoint.Intent.Builder builderForValue) {
						if (intentsBuilder_ == null) {
							ensureIntentsIsMutable();
							intents_.add(builderForValue.build());
							onChanged();
						} else {
							intentsBuilder_.addMessage(builderForValue.build());
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					public Builder addIntents(int index,
							Ic3Data.Application.Component.ExitPoint.Intent.Builder builderForValue) {
						if (intentsBuilder_ == null) {
							ensureIntentsIsMutable();
							intents_.add(index, builderForValue.build());
							onChanged();
						} else {
							intentsBuilder_.addMessage(index, builderForValue.build());
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					public Builder addAllIntents(
							java.lang.Iterable<? extends Ic3Data.Application.Component.ExitPoint.Intent> values) {
						if (intentsBuilder_ == null) {
							ensureIntentsIsMutable();
							super.addAll(values, intents_);
							onChanged();
						} else {
							intentsBuilder_.addAllMessages(values);
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					public Builder clearIntents() {
						if (intentsBuilder_ == null) {
							intents_ = java.util.Collections.emptyList();
							bitField0_ = (bitField0_ & ~0x00000008);
							onChanged();
						} else {
							intentsBuilder_.clear();
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					public Builder removeIntents(int index) {
						if (intentsBuilder_ == null) {
							ensureIntentsIsMutable();
							intents_.remove(index);
							onChanged();
						} else {
							intentsBuilder_.remove(index);
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					public Ic3Data.Application.Component.ExitPoint.Intent.Builder getIntentsBuilder(int index) {
						return getIntentsFieldBuilder().getBuilder(index);
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					@Override
					public Ic3Data.Application.Component.ExitPoint.IntentOrBuilder getIntentsOrBuilder(int index) {
						if (intentsBuilder_ == null) {
							return intents_.get(index);
						} else {
							return intentsBuilder_.getMessageOrBuilder(index);
						}
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					@Override
					public java.util.List<? extends Ic3Data.Application.Component.ExitPoint.IntentOrBuilder> getIntentsOrBuilderList() {
						if (intentsBuilder_ != null) {
							return intentsBuilder_.getMessageOrBuilderList();
						} else {
							return java.util.Collections.unmodifiableList(intents_);
						}
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					public Ic3Data.Application.Component.ExitPoint.Intent.Builder addIntentsBuilder() {
						return getIntentsFieldBuilder()
								.addBuilder(Ic3Data.Application.Component.ExitPoint.Intent.getDefaultInstance());
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					public Ic3Data.Application.Component.ExitPoint.Intent.Builder addIntentsBuilder(int index) {
						return getIntentsFieldBuilder().addBuilder(index,
								Ic3Data.Application.Component.ExitPoint.Intent.getDefaultInstance());
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Intent intents = 4;</code>
					 */
					public java.util.List<Ic3Data.Application.Component.ExitPoint.Intent.Builder> getIntentsBuilderList() {
						return getIntentsFieldBuilder().getBuilderList();
					}

					private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component.ExitPoint.Intent, Ic3Data.Application.Component.ExitPoint.Intent.Builder, Ic3Data.Application.Component.ExitPoint.IntentOrBuilder> getIntentsFieldBuilder() {
						if (intentsBuilder_ == null) {
							intentsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component.ExitPoint.Intent, Ic3Data.Application.Component.ExitPoint.Intent.Builder, Ic3Data.Application.Component.ExitPoint.IntentOrBuilder>(
									intents_, ((bitField0_ & 0x00000008) == 0x00000008), getParentForChildren(),
									isClean());
							intents_ = null;
						}
						return intentsBuilder_;
					}

					// repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;
					private java.util.List<Ic3Data.Application.Component.ExitPoint.Uri> uris_ = java.util.Collections
							.emptyList();

					private void ensureUrisIsMutable() {
						if (!((bitField0_ & 0x00000010) == 0x00000010)) {
							uris_ = new java.util.ArrayList<Ic3Data.Application.Component.ExitPoint.Uri>(uris_);
							bitField0_ |= 0x00000010;
						}
					}

					private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component.ExitPoint.Uri, Ic3Data.Application.Component.ExitPoint.Uri.Builder, Ic3Data.Application.Component.ExitPoint.UriOrBuilder> urisBuilder_;

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					@Override
					public java.util.List<Ic3Data.Application.Component.ExitPoint.Uri> getUrisList() {
						if (urisBuilder_ == null) {
							return java.util.Collections.unmodifiableList(uris_);
						} else {
							return urisBuilder_.getMessageList();
						}
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					@Override
					public int getUrisCount() {
						if (urisBuilder_ == null) {
							return uris_.size();
						} else {
							return urisBuilder_.getCount();
						}
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					@Override
					public Ic3Data.Application.Component.ExitPoint.Uri getUris(int index) {
						if (urisBuilder_ == null) {
							return uris_.get(index);
						} else {
							return urisBuilder_.getMessage(index);
						}
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					public Builder setUris(int index, Ic3Data.Application.Component.ExitPoint.Uri value) {
						if (urisBuilder_ == null) {
							if (value == null) {
								throw new NullPointerException();
							}
							ensureUrisIsMutable();
							uris_.set(index, value);
							onChanged();
						} else {
							urisBuilder_.setMessage(index, value);
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					public Builder setUris(int index,
							Ic3Data.Application.Component.ExitPoint.Uri.Builder builderForValue) {
						if (urisBuilder_ == null) {
							ensureUrisIsMutable();
							uris_.set(index, builderForValue.build());
							onChanged();
						} else {
							urisBuilder_.setMessage(index, builderForValue.build());
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					public Builder addUris(Ic3Data.Application.Component.ExitPoint.Uri value) {
						if (urisBuilder_ == null) {
							if (value == null) {
								throw new NullPointerException();
							}
							ensureUrisIsMutable();
							uris_.add(value);
							onChanged();
						} else {
							urisBuilder_.addMessage(value);
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					public Builder addUris(int index, Ic3Data.Application.Component.ExitPoint.Uri value) {
						if (urisBuilder_ == null) {
							if (value == null) {
								throw new NullPointerException();
							}
							ensureUrisIsMutable();
							uris_.add(index, value);
							onChanged();
						} else {
							urisBuilder_.addMessage(index, value);
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					public Builder addUris(Ic3Data.Application.Component.ExitPoint.Uri.Builder builderForValue) {
						if (urisBuilder_ == null) {
							ensureUrisIsMutable();
							uris_.add(builderForValue.build());
							onChanged();
						} else {
							urisBuilder_.addMessage(builderForValue.build());
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					public Builder addUris(int index,
							Ic3Data.Application.Component.ExitPoint.Uri.Builder builderForValue) {
						if (urisBuilder_ == null) {
							ensureUrisIsMutable();
							uris_.add(index, builderForValue.build());
							onChanged();
						} else {
							urisBuilder_.addMessage(index, builderForValue.build());
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					public Builder addAllUris(
							java.lang.Iterable<? extends Ic3Data.Application.Component.ExitPoint.Uri> values) {
						if (urisBuilder_ == null) {
							ensureUrisIsMutable();
							super.addAll(values, uris_);
							onChanged();
						} else {
							urisBuilder_.addAllMessages(values);
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					public Builder clearUris() {
						if (urisBuilder_ == null) {
							uris_ = java.util.Collections.emptyList();
							bitField0_ = (bitField0_ & ~0x00000010);
							onChanged();
						} else {
							urisBuilder_.clear();
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					public Builder removeUris(int index) {
						if (urisBuilder_ == null) {
							ensureUrisIsMutable();
							uris_.remove(index);
							onChanged();
						} else {
							urisBuilder_.remove(index);
						}
						return this;
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					public Ic3Data.Application.Component.ExitPoint.Uri.Builder getUrisBuilder(int index) {
						return getUrisFieldBuilder().getBuilder(index);
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					@Override
					public Ic3Data.Application.Component.ExitPoint.UriOrBuilder getUrisOrBuilder(int index) {
						if (urisBuilder_ == null) {
							return uris_.get(index);
						} else {
							return urisBuilder_.getMessageOrBuilder(index);
						}
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					@Override
					public java.util.List<? extends Ic3Data.Application.Component.ExitPoint.UriOrBuilder> getUrisOrBuilderList() {
						if (urisBuilder_ != null) {
							return urisBuilder_.getMessageOrBuilderList();
						} else {
							return java.util.Collections.unmodifiableList(uris_);
						}
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					public Ic3Data.Application.Component.ExitPoint.Uri.Builder addUrisBuilder() {
						return getUrisFieldBuilder()
								.addBuilder(Ic3Data.Application.Component.ExitPoint.Uri.getDefaultInstance());
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					public Ic3Data.Application.Component.ExitPoint.Uri.Builder addUrisBuilder(int index) {
						return getUrisFieldBuilder().addBuilder(index,
								Ic3Data.Application.Component.ExitPoint.Uri.getDefaultInstance());
					}

					/**
					 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint.Uri uris = 5;</code>
					 */
					public java.util.List<Ic3Data.Application.Component.ExitPoint.Uri.Builder> getUrisBuilderList() {
						return getUrisFieldBuilder().getBuilderList();
					}

					private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component.ExitPoint.Uri, Ic3Data.Application.Component.ExitPoint.Uri.Builder, Ic3Data.Application.Component.ExitPoint.UriOrBuilder> getUrisFieldBuilder() {
						if (urisBuilder_ == null) {
							urisBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component.ExitPoint.Uri, Ic3Data.Application.Component.ExitPoint.Uri.Builder, Ic3Data.Application.Component.ExitPoint.UriOrBuilder>(
									uris_, ((bitField0_ & 0x00000010) == 0x00000010), getParentForChildren(),
									isClean());
							uris_ = null;
						}
						return urisBuilder_;
					}

					// @@protoc_insertion_point(builder_scope:edu.psu.cse.siis.ic3.Application.Component.ExitPoint)
				}

				static {
					defaultInstance = new ExitPoint(true);
					defaultInstance.initFields();
				}

				// @@protoc_insertion_point(class_scope:edu.psu.cse.siis.ic3.Application.Component.ExitPoint)
			}

			private int bitField0_;
			// optional string name = 1;
			public static final int NAME_FIELD_NUMBER = 1;
			private java.lang.Object name_;

			/**
			 * <code>optional string name = 1;</code>
			 */
			@Override
			public boolean hasName() {
				return ((bitField0_ & 0x00000001) == 0x00000001);
			}

			/**
			 * <code>optional string name = 1;</code>
			 */
			@Override
			public java.lang.String getName() {
				java.lang.Object ref = name_;
				if (ref instanceof java.lang.String) {
					return (java.lang.String) ref;
				} else {
					com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
					java.lang.String s = bs.toStringUtf8();
					if (bs.isValidUtf8()) {
						name_ = s;
					}
					return s;
				}
			}

			/**
			 * <code>optional string name = 1;</code>
			 */
			@Override
			public com.google.protobuf.ByteString getNameBytes() {
				java.lang.Object ref = name_;
				if (ref instanceof java.lang.String) {
					com.google.protobuf.ByteString b = com.google.protobuf.ByteString
							.copyFromUtf8((java.lang.String) ref);
					name_ = b;
					return b;
				} else {
					return (com.google.protobuf.ByteString) ref;
				}
			}

			// optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;
			public static final int KIND_FIELD_NUMBER = 2;
			private Ic3Data.Application.Component.ComponentKind kind_;

			/**
			 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;</code>
			 */
			@Override
			public boolean hasKind() {
				return ((bitField0_ & 0x00000002) == 0x00000002);
			}

			/**
			 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;</code>
			 */
			@Override
			public Ic3Data.Application.Component.ComponentKind getKind() {
				return kind_;
			}

			// optional bool exported = 3;
			public static final int EXPORTED_FIELD_NUMBER = 3;
			private boolean exported_;

			/**
			 * <code>optional bool exported = 3;</code>
			 */
			@Override
			public boolean hasExported() {
				return ((bitField0_ & 0x00000004) == 0x00000004);
			}

			/**
			 * <code>optional bool exported = 3;</code>
			 */
			@Override
			public boolean getExported() {
				return exported_;
			}

			// optional string permission = 4;
			public static final int PERMISSION_FIELD_NUMBER = 4;
			private java.lang.Object permission_;

			/**
			 * <code>optional string permission = 4;</code>
			 */
			@Override
			public boolean hasPermission() {
				return ((bitField0_ & 0x00000008) == 0x00000008);
			}

			/**
			 * <code>optional string permission = 4;</code>
			 */
			@Override
			public java.lang.String getPermission() {
				java.lang.Object ref = permission_;
				if (ref instanceof java.lang.String) {
					return (java.lang.String) ref;
				} else {
					com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
					java.lang.String s = bs.toStringUtf8();
					if (bs.isValidUtf8()) {
						permission_ = s;
					}
					return s;
				}
			}

			/**
			 * <code>optional string permission = 4;</code>
			 */
			@Override
			public com.google.protobuf.ByteString getPermissionBytes() {
				java.lang.Object ref = permission_;
				if (ref instanceof java.lang.String) {
					com.google.protobuf.ByteString b = com.google.protobuf.ByteString
							.copyFromUtf8((java.lang.String) ref);
					permission_ = b;
					return b;
				} else {
					return (com.google.protobuf.ByteString) ref;
				}
			}

			// optional uint32 missing = 5;
			public static final int MISSING_FIELD_NUMBER = 5;
			private int missing_;

			/**
			 * <code>optional uint32 missing = 5;</code>
			 */
			@Override
			public boolean hasMissing() {
				return ((bitField0_ & 0x00000010) == 0x00000010);
			}

			/**
			 * <code>optional uint32 missing = 5;</code>
			 */
			@Override
			public int getMissing() {
				return missing_;
			}

			// repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;
			public static final int EXTRAS_FIELD_NUMBER = 6;
			private java.util.List<Ic3Data.Application.Component.Extra> extras_;

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
			 */
			@Override
			public java.util.List<Ic3Data.Application.Component.Extra> getExtrasList() {
				return extras_;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
			 */
			@Override
			public java.util.List<? extends Ic3Data.Application.Component.ExtraOrBuilder> getExtrasOrBuilderList() {
				return extras_;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
			 */
			@Override
			public int getExtrasCount() {
				return extras_.size();
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
			 */
			@Override
			public Ic3Data.Application.Component.Extra getExtras(int index) {
				return extras_.get(index);
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
			 */
			@Override
			public Ic3Data.Application.Component.ExtraOrBuilder getExtrasOrBuilder(int index) {
				return extras_.get(index);
			}

			// optional string alias_target = 7;
			public static final int ALIAS_TARGET_FIELD_NUMBER = 7;
			private java.lang.Object aliasTarget_;

			/**
			 * <code>optional string alias_target = 7;</code>
			 */
			@Override
			public boolean hasAliasTarget() {
				return ((bitField0_ & 0x00000020) == 0x00000020);
			}

			/**
			 * <code>optional string alias_target = 7;</code>
			 */
			@Override
			public java.lang.String getAliasTarget() {
				java.lang.Object ref = aliasTarget_;
				if (ref instanceof java.lang.String) {
					return (java.lang.String) ref;
				} else {
					com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
					java.lang.String s = bs.toStringUtf8();
					if (bs.isValidUtf8()) {
						aliasTarget_ = s;
					}
					return s;
				}
			}

			/**
			 * <code>optional string alias_target = 7;</code>
			 */
			@Override
			public com.google.protobuf.ByteString getAliasTargetBytes() {
				java.lang.Object ref = aliasTarget_;
				if (ref instanceof java.lang.String) {
					com.google.protobuf.ByteString b = com.google.protobuf.ByteString
							.copyFromUtf8((java.lang.String) ref);
					aliasTarget_ = b;
					return b;
				} else {
					return (com.google.protobuf.ByteString) ref;
				}
			}

			// optional bool grant_uri_permissions = 8;
			public static final int GRANT_URI_PERMISSIONS_FIELD_NUMBER = 8;
			private boolean grantUriPermissions_;

			/**
			 * <code>optional bool grant_uri_permissions = 8;</code>
			 */
			@Override
			public boolean hasGrantUriPermissions() {
				return ((bitField0_ & 0x00000040) == 0x00000040);
			}

			/**
			 * <code>optional bool grant_uri_permissions = 8;</code>
			 */
			@Override
			public boolean getGrantUriPermissions() {
				return grantUriPermissions_;
			}

			// optional string read_permission = 9;
			public static final int READ_PERMISSION_FIELD_NUMBER = 9;
			private java.lang.Object readPermission_;

			/**
			 * <code>optional string read_permission = 9;</code>
			 */
			@Override
			public boolean hasReadPermission() {
				return ((bitField0_ & 0x00000080) == 0x00000080);
			}

			/**
			 * <code>optional string read_permission = 9;</code>
			 */
			@Override
			public java.lang.String getReadPermission() {
				java.lang.Object ref = readPermission_;
				if (ref instanceof java.lang.String) {
					return (java.lang.String) ref;
				} else {
					com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
					java.lang.String s = bs.toStringUtf8();
					if (bs.isValidUtf8()) {
						readPermission_ = s;
					}
					return s;
				}
			}

			/**
			 * <code>optional string read_permission = 9;</code>
			 */
			@Override
			public com.google.protobuf.ByteString getReadPermissionBytes() {
				java.lang.Object ref = readPermission_;
				if (ref instanceof java.lang.String) {
					com.google.protobuf.ByteString b = com.google.protobuf.ByteString
							.copyFromUtf8((java.lang.String) ref);
					readPermission_ = b;
					return b;
				} else {
					return (com.google.protobuf.ByteString) ref;
				}
			}

			// optional string write_permission = 10;
			public static final int WRITE_PERMISSION_FIELD_NUMBER = 10;
			private java.lang.Object writePermission_;

			/**
			 * <code>optional string write_permission = 10;</code>
			 */
			@Override
			public boolean hasWritePermission() {
				return ((bitField0_ & 0x00000100) == 0x00000100);
			}

			/**
			 * <code>optional string write_permission = 10;</code>
			 */
			@Override
			public java.lang.String getWritePermission() {
				java.lang.Object ref = writePermission_;
				if (ref instanceof java.lang.String) {
					return (java.lang.String) ref;
				} else {
					com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
					java.lang.String s = bs.toStringUtf8();
					if (bs.isValidUtf8()) {
						writePermission_ = s;
					}
					return s;
				}
			}

			/**
			 * <code>optional string write_permission = 10;</code>
			 */
			@Override
			public com.google.protobuf.ByteString getWritePermissionBytes() {
				java.lang.Object ref = writePermission_;
				if (ref instanceof java.lang.String) {
					com.google.protobuf.ByteString b = com.google.protobuf.ByteString
							.copyFromUtf8((java.lang.String) ref);
					writePermission_ = b;
					return b;
				} else {
					return (com.google.protobuf.ByteString) ref;
				}
			}

			// repeated string authorities = 11;
			public static final int AUTHORITIES_FIELD_NUMBER = 11;
			private com.google.protobuf.LazyStringList authorities_;

			/**
			 * <code>repeated string authorities = 11;</code>
			 */
			@Override
			public java.util.List<java.lang.String> getAuthoritiesList() {
				return authorities_;
			}

			/**
			 * <code>repeated string authorities = 11;</code>
			 */
			@Override
			public int getAuthoritiesCount() {
				return authorities_.size();
			}

			/**
			 * <code>repeated string authorities = 11;</code>
			 */
			@Override
			public java.lang.String getAuthorities(int index) {
				return authorities_.get(index);
			}

			/**
			 * <code>repeated string authorities = 11;</code>
			 */
			@Override
			public com.google.protobuf.ByteString getAuthoritiesBytes(int index) {
				return authorities_.getByteString(index);
			}

			// repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter
			// intent_filters = 12;
			public static final int INTENT_FILTERS_FIELD_NUMBER = 12;
			private java.util.List<Ic3Data.Application.Component.IntentFilter> intentFilters_;

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
			 */
			@Override
			public java.util.List<Ic3Data.Application.Component.IntentFilter> getIntentFiltersList() {
				return intentFilters_;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
			 */
			@Override
			public java.util.List<? extends Ic3Data.Application.Component.IntentFilterOrBuilder> getIntentFiltersOrBuilderList() {
				return intentFilters_;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
			 */
			@Override
			public int getIntentFiltersCount() {
				return intentFilters_.size();
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
			 */
			@Override
			public Ic3Data.Application.Component.IntentFilter getIntentFilters(int index) {
				return intentFilters_.get(index);
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
			 */
			@Override
			public Ic3Data.Application.Component.IntentFilterOrBuilder getIntentFiltersOrBuilder(int index) {
				return intentFilters_.get(index);
			}

			// repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points =
			// 13;
			public static final int EXIT_POINTS_FIELD_NUMBER = 13;
			private java.util.List<Ic3Data.Application.Component.ExitPoint> exitPoints_;

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
			 */
			@Override
			public java.util.List<Ic3Data.Application.Component.ExitPoint> getExitPointsList() {
				return exitPoints_;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
			 */
			@Override
			public java.util.List<? extends Ic3Data.Application.Component.ExitPointOrBuilder> getExitPointsOrBuilderList() {
				return exitPoints_;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
			 */
			@Override
			public int getExitPointsCount() {
				return exitPoints_.size();
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
			 */
			@Override
			public Ic3Data.Application.Component.ExitPoint getExitPoints(int index) {
				return exitPoints_.get(index);
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
			 */
			@Override
			public Ic3Data.Application.Component.ExitPointOrBuilder getExitPointsOrBuilder(int index) {
				return exitPoints_.get(index);
			}

			// optional .edu.psu.cse.siis.ic3.Application.Component.Instruction
			// registration_instruction = 14;
			public static final int REGISTRATION_INSTRUCTION_FIELD_NUMBER = 14;
			private Ic3Data.Application.Component.Instruction registrationInstruction_;

			/**
			 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction registration_instruction = 14;</code>
			 */
			@Override
			public boolean hasRegistrationInstruction() {
				return ((bitField0_ & 0x00000200) == 0x00000200);
			}

			/**
			 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction registration_instruction = 14;</code>
			 */
			@Override
			public Ic3Data.Application.Component.Instruction getRegistrationInstruction() {
				return registrationInstruction_;
			}

			/**
			 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction registration_instruction = 14;</code>
			 */
			@Override
			public Ic3Data.Application.Component.InstructionOrBuilder getRegistrationInstructionOrBuilder() {
				return registrationInstruction_;
			}

			private void initFields() {
				name_ = "";
				kind_ = Ic3Data.Application.Component.ComponentKind.ACTIVITY;
				exported_ = false;
				permission_ = "";
				missing_ = 0;
				extras_ = java.util.Collections.emptyList();
				aliasTarget_ = "";
				grantUriPermissions_ = false;
				readPermission_ = "";
				writePermission_ = "";
				authorities_ = com.google.protobuf.LazyStringArrayList.EMPTY;
				intentFilters_ = java.util.Collections.emptyList();
				exitPoints_ = java.util.Collections.emptyList();
				registrationInstruction_ = Ic3Data.Application.Component.Instruction.getDefaultInstance();
			}

			private byte memoizedIsInitialized = -1;

			@Override
			public final boolean isInitialized() {
				byte isInitialized = memoizedIsInitialized;
				if (isInitialized != -1)
					return isInitialized == 1;

				memoizedIsInitialized = 1;
				return true;
			}

			@Override
			public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
				getSerializedSize();
				if (((bitField0_ & 0x00000001) == 0x00000001)) {
					output.writeBytes(1, getNameBytes());
				}
				if (((bitField0_ & 0x00000002) == 0x00000002)) {
					output.writeEnum(2, kind_.getNumber());
				}
				if (((bitField0_ & 0x00000004) == 0x00000004)) {
					output.writeBool(3, exported_);
				}
				if (((bitField0_ & 0x00000008) == 0x00000008)) {
					output.writeBytes(4, getPermissionBytes());
				}
				if (((bitField0_ & 0x00000010) == 0x00000010)) {
					output.writeUInt32(5, missing_);
				}
				for (int i = 0; i < extras_.size(); i++) {
					output.writeMessage(6, extras_.get(i));
				}
				if (((bitField0_ & 0x00000020) == 0x00000020)) {
					output.writeBytes(7, getAliasTargetBytes());
				}
				if (((bitField0_ & 0x00000040) == 0x00000040)) {
					output.writeBool(8, grantUriPermissions_);
				}
				if (((bitField0_ & 0x00000080) == 0x00000080)) {
					output.writeBytes(9, getReadPermissionBytes());
				}
				if (((bitField0_ & 0x00000100) == 0x00000100)) {
					output.writeBytes(10, getWritePermissionBytes());
				}
				for (int i = 0; i < authorities_.size(); i++) {
					output.writeBytes(11, authorities_.getByteString(i));
				}
				for (int i = 0; i < intentFilters_.size(); i++) {
					output.writeMessage(12, intentFilters_.get(i));
				}
				for (int i = 0; i < exitPoints_.size(); i++) {
					output.writeMessage(13, exitPoints_.get(i));
				}
				if (((bitField0_ & 0x00000200) == 0x00000200)) {
					output.writeMessage(14, registrationInstruction_);
				}
				getUnknownFields().writeTo(output);
			}

			private int memoizedSerializedSize = -1;
			private App app;

			@Override
			public int getSerializedSize() {
				int size = memoizedSerializedSize;
				if (size != -1)
					return size;

				size = 0;
				if (((bitField0_ & 0x00000001) == 0x00000001)) {
					size += com.google.protobuf.CodedOutputStream.computeBytesSize(1, getNameBytes());
				}
				if (((bitField0_ & 0x00000002) == 0x00000002)) {
					size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, kind_.getNumber());
				}
				if (((bitField0_ & 0x00000004) == 0x00000004)) {
					size += com.google.protobuf.CodedOutputStream.computeBoolSize(3, exported_);
				}
				if (((bitField0_ & 0x00000008) == 0x00000008)) {
					size += com.google.protobuf.CodedOutputStream.computeBytesSize(4, getPermissionBytes());
				}
				if (((bitField0_ & 0x00000010) == 0x00000010)) {
					size += com.google.protobuf.CodedOutputStream.computeUInt32Size(5, missing_);
				}
				for (int i = 0; i < extras_.size(); i++) {
					size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, extras_.get(i));
				}
				if (((bitField0_ & 0x00000020) == 0x00000020)) {
					size += com.google.protobuf.CodedOutputStream.computeBytesSize(7, getAliasTargetBytes());
				}
				if (((bitField0_ & 0x00000040) == 0x00000040)) {
					size += com.google.protobuf.CodedOutputStream.computeBoolSize(8, grantUriPermissions_);
				}
				if (((bitField0_ & 0x00000080) == 0x00000080)) {
					size += com.google.protobuf.CodedOutputStream.computeBytesSize(9, getReadPermissionBytes());
				}
				if (((bitField0_ & 0x00000100) == 0x00000100)) {
					size += com.google.protobuf.CodedOutputStream.computeBytesSize(10, getWritePermissionBytes());
				}
				{
					int dataSize = 0;
					for (int i = 0; i < authorities_.size(); i++) {
						dataSize += com.google.protobuf.CodedOutputStream
								.computeBytesSizeNoTag(authorities_.getByteString(i));
					}
					size += dataSize;
					size += 1 * getAuthoritiesList().size();
				}
				for (int i = 0; i < intentFilters_.size(); i++) {
					size += com.google.protobuf.CodedOutputStream.computeMessageSize(12, intentFilters_.get(i));
				}
				for (int i = 0; i < exitPoints_.size(); i++) {
					size += com.google.protobuf.CodedOutputStream.computeMessageSize(13, exitPoints_.get(i));
				}
				if (((bitField0_ & 0x00000200) == 0x00000200)) {
					size += com.google.protobuf.CodedOutputStream.computeMessageSize(14, registrationInstruction_);
				}
				size += getUnknownFields().getSerializedSize();
				memoizedSerializedSize = size;
				return size;
			}

			private static final long serialVersionUID = 0L;

			@java.lang.Override
			protected java.lang.Object writeReplace() throws java.io.ObjectStreamException {
				return super.writeReplace();
			}

			public static Ic3Data.Application.Component parseFrom(com.google.protobuf.ByteString data)
					throws com.google.protobuf.InvalidProtocolBufferException {
				return PARSER.parseFrom(data);
			}

			public static Ic3Data.Application.Component parseFrom(com.google.protobuf.ByteString data,
					com.google.protobuf.ExtensionRegistryLite extensionRegistry)
					throws com.google.protobuf.InvalidProtocolBufferException {
				return PARSER.parseFrom(data, extensionRegistry);
			}

			public static Ic3Data.Application.Component parseFrom(byte[] data)
					throws com.google.protobuf.InvalidProtocolBufferException {
				return PARSER.parseFrom(data);
			}

			public static Ic3Data.Application.Component parseFrom(byte[] data,
					com.google.protobuf.ExtensionRegistryLite extensionRegistry)
					throws com.google.protobuf.InvalidProtocolBufferException {
				return PARSER.parseFrom(data, extensionRegistry);
			}

			public static Ic3Data.Application.Component parseFrom(java.io.InputStream input)
					throws java.io.IOException {
				return PARSER.parseFrom(input);
			}

			public static Ic3Data.Application.Component parseFrom(java.io.InputStream input,
					com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
				return PARSER.parseFrom(input, extensionRegistry);
			}

			public static Ic3Data.Application.Component parseDelimitedFrom(java.io.InputStream input)
					throws java.io.IOException {
				return PARSER.parseDelimitedFrom(input);
			}

			public static Ic3Data.Application.Component parseDelimitedFrom(java.io.InputStream input,
					com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
				return PARSER.parseDelimitedFrom(input, extensionRegistry);
			}

			public static Ic3Data.Application.Component parseFrom(com.google.protobuf.CodedInputStream input)
					throws java.io.IOException {
				return PARSER.parseFrom(input);
			}

			public static Ic3Data.Application.Component parseFrom(com.google.protobuf.CodedInputStream input,
					com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
				return PARSER.parseFrom(input, extensionRegistry);
			}

			public static Builder newBuilder() {
				return Builder.create();
			}

			@Override
			public Builder newBuilderForType() {
				return newBuilder();
			}

			public static Builder newBuilder(Ic3Data.Application.Component prototype) {
				return newBuilder().mergeFrom(prototype);
			}

			@Override
			public Builder toBuilder() {
				return newBuilder(this);
			}

			@java.lang.Override
			protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
				Builder builder = new Builder(parent);
				return builder;
			}

			/**
			 * Protobuf type {@code edu.psu.cse.siis.ic3.Application.Component}
			 */
			public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder>
					implements Ic3Data.Application.ComponentOrBuilder {
				public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
					return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_descriptor;
				}

				@Override
				protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
					return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_fieldAccessorTable
							.ensureFieldAccessorsInitialized(Ic3Data.Application.Component.class,
									Ic3Data.Application.Component.Builder.class);
				}

				// Construct using Ic3Data.Application.Component.newBuilder()
				private Builder() {
					maybeForceBuilderInitialization();
				}

				private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
					super(parent);
					maybeForceBuilderInitialization();
				}

				private void maybeForceBuilderInitialization() {
					if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
						getExtrasFieldBuilder();
						getIntentFiltersFieldBuilder();
						getExitPointsFieldBuilder();
						getRegistrationInstructionFieldBuilder();
					}
				}

				private static Builder create() {
					return new Builder();
				}

				@Override
				public Builder clear() {
					super.clear();
					name_ = "";
					bitField0_ = (bitField0_ & ~0x00000001);
					kind_ = Ic3Data.Application.Component.ComponentKind.ACTIVITY;
					bitField0_ = (bitField0_ & ~0x00000002);
					exported_ = false;
					bitField0_ = (bitField0_ & ~0x00000004);
					permission_ = "";
					bitField0_ = (bitField0_ & ~0x00000008);
					missing_ = 0;
					bitField0_ = (bitField0_ & ~0x00000010);
					if (extrasBuilder_ == null) {
						extras_ = java.util.Collections.emptyList();
						bitField0_ = (bitField0_ & ~0x00000020);
					} else {
						extrasBuilder_.clear();
					}
					aliasTarget_ = "";
					bitField0_ = (bitField0_ & ~0x00000040);
					grantUriPermissions_ = false;
					bitField0_ = (bitField0_ & ~0x00000080);
					readPermission_ = "";
					bitField0_ = (bitField0_ & ~0x00000100);
					writePermission_ = "";
					bitField0_ = (bitField0_ & ~0x00000200);
					authorities_ = com.google.protobuf.LazyStringArrayList.EMPTY;
					bitField0_ = (bitField0_ & ~0x00000400);
					if (intentFiltersBuilder_ == null) {
						intentFilters_ = java.util.Collections.emptyList();
						bitField0_ = (bitField0_ & ~0x00000800);
					} else {
						intentFiltersBuilder_.clear();
					}
					if (exitPointsBuilder_ == null) {
						exitPoints_ = java.util.Collections.emptyList();
						bitField0_ = (bitField0_ & ~0x00001000);
					} else {
						exitPointsBuilder_.clear();
					}
					if (registrationInstructionBuilder_ == null) {
						registrationInstruction_ = Ic3Data.Application.Component.Instruction.getDefaultInstance();
					} else {
						registrationInstructionBuilder_.clear();
					}
					bitField0_ = (bitField0_ & ~0x00002000);
					return this;
				}

				@Override
				public Builder clone() {
					return create().mergeFrom(buildPartial());
				}

				@Override
				public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
					return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_Component_descriptor;
				}

				@Override
				public Ic3Data.Application.Component getDefaultInstanceForType() {
					return Ic3Data.Application.Component.getDefaultInstance();
				}

				@Override
				public Ic3Data.Application.Component build() {
					Ic3Data.Application.Component result = buildPartial();
					if (!result.isInitialized()) {
						throw newUninitializedMessageException(result);
					}
					return result;
				}

				@Override
				public Ic3Data.Application.Component buildPartial() {
					Ic3Data.Application.Component result = new Ic3Data.Application.Component(this);
					int from_bitField0_ = bitField0_;
					int to_bitField0_ = 0;
					if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
						to_bitField0_ |= 0x00000001;
					}
					result.name_ = name_;
					if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
						to_bitField0_ |= 0x00000002;
					}
					result.kind_ = kind_;
					if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
						to_bitField0_ |= 0x00000004;
					}
					result.exported_ = exported_;
					if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
						to_bitField0_ |= 0x00000008;
					}
					result.permission_ = permission_;
					if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
						to_bitField0_ |= 0x00000010;
					}
					result.missing_ = missing_;
					if (extrasBuilder_ == null) {
						if (((bitField0_ & 0x00000020) == 0x00000020)) {
							extras_ = java.util.Collections.unmodifiableList(extras_);
							bitField0_ = (bitField0_ & ~0x00000020);
						}
						result.extras_ = extras_;
					} else {
						result.extras_ = extrasBuilder_.build();
					}
					if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
						to_bitField0_ |= 0x00000020;
					}
					result.aliasTarget_ = aliasTarget_;
					if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
						to_bitField0_ |= 0x00000040;
					}
					result.grantUriPermissions_ = grantUriPermissions_;
					if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
						to_bitField0_ |= 0x00000080;
					}
					result.readPermission_ = readPermission_;
					if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
						to_bitField0_ |= 0x00000100;
					}
					result.writePermission_ = writePermission_;
					if (((bitField0_ & 0x00000400) == 0x00000400)) {
						authorities_ = new com.google.protobuf.UnmodifiableLazyStringList(authorities_);
						bitField0_ = (bitField0_ & ~0x00000400);
					}
					result.authorities_ = authorities_;
					if (intentFiltersBuilder_ == null) {
						if (((bitField0_ & 0x00000800) == 0x00000800)) {
							intentFilters_ = java.util.Collections.unmodifiableList(intentFilters_);
							bitField0_ = (bitField0_ & ~0x00000800);
						}
						result.intentFilters_ = intentFilters_;
					} else {
						result.intentFilters_ = intentFiltersBuilder_.build();
					}
					if (exitPointsBuilder_ == null) {
						if (((bitField0_ & 0x00001000) == 0x00001000)) {
							exitPoints_ = java.util.Collections.unmodifiableList(exitPoints_);
							bitField0_ = (bitField0_ & ~0x00001000);
						}
						result.exitPoints_ = exitPoints_;
					} else {
						result.exitPoints_ = exitPointsBuilder_.build();
					}
					if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
						to_bitField0_ |= 0x00000200;
					}
					if (registrationInstructionBuilder_ == null) {
						result.registrationInstruction_ = registrationInstruction_;
					} else {
						result.registrationInstruction_ = registrationInstructionBuilder_.build();
					}
					result.bitField0_ = to_bitField0_;
					onBuilt();
					return result;
				}

				@Override
				public Builder mergeFrom(com.google.protobuf.Message other) {
					if (other instanceof Ic3Data.Application.Component) {
						return mergeFrom((Ic3Data.Application.Component) other);
					} else {
						super.mergeFrom(other);
						return this;
					}
				}

				public Builder mergeFrom(Ic3Data.Application.Component other) {
					if (other == Ic3Data.Application.Component.getDefaultInstance())
						return this;
					if (other.hasName()) {
						bitField0_ |= 0x00000001;
						name_ = other.name_;
						onChanged();
					}
					if (other.hasKind()) {
						setKind(other.getKind());
					}
					if (other.hasExported()) {
						setExported(other.getExported());
					}
					if (other.hasPermission()) {
						bitField0_ |= 0x00000008;
						permission_ = other.permission_;
						onChanged();
					}
					if (other.hasMissing()) {
						setMissing(other.getMissing());
					}
					if (extrasBuilder_ == null) {
						if (!other.extras_.isEmpty()) {
							if (extras_.isEmpty()) {
								extras_ = other.extras_;
								bitField0_ = (bitField0_ & ~0x00000020);
							} else {
								ensureExtrasIsMutable();
								extras_.addAll(other.extras_);
							}
							onChanged();
						}
					} else {
						if (!other.extras_.isEmpty()) {
							if (extrasBuilder_.isEmpty()) {
								extrasBuilder_.dispose();
								extrasBuilder_ = null;
								extras_ = other.extras_;
								bitField0_ = (bitField0_ & ~0x00000020);
								extrasBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders
										? getExtrasFieldBuilder()
										: null;
							} else {
								extrasBuilder_.addAllMessages(other.extras_);
							}
						}
					}
					if (other.hasAliasTarget()) {
						bitField0_ |= 0x00000040;
						aliasTarget_ = other.aliasTarget_;
						onChanged();
					}
					if (other.hasGrantUriPermissions()) {
						setGrantUriPermissions(other.getGrantUriPermissions());
					}
					if (other.hasReadPermission()) {
						bitField0_ |= 0x00000100;
						readPermission_ = other.readPermission_;
						onChanged();
					}
					if (other.hasWritePermission()) {
						bitField0_ |= 0x00000200;
						writePermission_ = other.writePermission_;
						onChanged();
					}
					if (!other.authorities_.isEmpty()) {
						if (authorities_.isEmpty()) {
							authorities_ = other.authorities_;
							bitField0_ = (bitField0_ & ~0x00000400);
						} else {
							ensureAuthoritiesIsMutable();
							authorities_.addAll(other.authorities_);
						}
						onChanged();
					}
					if (intentFiltersBuilder_ == null) {
						if (!other.intentFilters_.isEmpty()) {
							if (intentFilters_.isEmpty()) {
								intentFilters_ = other.intentFilters_;
								bitField0_ = (bitField0_ & ~0x00000800);
							} else {
								ensureIntentFiltersIsMutable();
								intentFilters_.addAll(other.intentFilters_);
							}
							onChanged();
						}
					} else {
						if (!other.intentFilters_.isEmpty()) {
							if (intentFiltersBuilder_.isEmpty()) {
								intentFiltersBuilder_.dispose();
								intentFiltersBuilder_ = null;
								intentFilters_ = other.intentFilters_;
								bitField0_ = (bitField0_ & ~0x00000800);
								intentFiltersBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders
										? getIntentFiltersFieldBuilder()
										: null;
							} else {
								intentFiltersBuilder_.addAllMessages(other.intentFilters_);
							}
						}
					}
					if (exitPointsBuilder_ == null) {
						if (!other.exitPoints_.isEmpty()) {
							if (exitPoints_.isEmpty()) {
								exitPoints_ = other.exitPoints_;
								bitField0_ = (bitField0_ & ~0x00001000);
							} else {
								ensureExitPointsIsMutable();
								exitPoints_.addAll(other.exitPoints_);
							}
							onChanged();
						}
					} else {
						if (!other.exitPoints_.isEmpty()) {
							if (exitPointsBuilder_.isEmpty()) {
								exitPointsBuilder_.dispose();
								exitPointsBuilder_ = null;
								exitPoints_ = other.exitPoints_;
								bitField0_ = (bitField0_ & ~0x00001000);
								exitPointsBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders
										? getExitPointsFieldBuilder()
										: null;
							} else {
								exitPointsBuilder_.addAllMessages(other.exitPoints_);
							}
						}
					}
					if (other.hasRegistrationInstruction()) {
						mergeRegistrationInstruction(other.getRegistrationInstruction());
					}
					this.mergeUnknownFields(other.getUnknownFields());
					return this;
				}

				@Override
				public final boolean isInitialized() {
					return true;
				}

				@Override
				public Builder mergeFrom(com.google.protobuf.CodedInputStream input,
						com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
					Ic3Data.Application.Component parsedMessage = null;
					try {
						parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
					} catch (com.google.protobuf.InvalidProtocolBufferException e) {
						parsedMessage = (Ic3Data.Application.Component) e.getUnfinishedMessage();
						throw e;
					} finally {
						if (parsedMessage != null) {
							mergeFrom(parsedMessage);
						}
					}
					return this;
				}

				private int bitField0_;

				// optional string name = 1;
				private java.lang.Object name_ = "";

				/**
				 * <code>optional string name = 1;</code>
				 */
				@Override
				public boolean hasName() {
					return ((bitField0_ & 0x00000001) == 0x00000001);
				}

				/**
				 * <code>optional string name = 1;</code>
				 */
				@Override
				public java.lang.String getName() {
					java.lang.Object ref = name_;
					if (!(ref instanceof java.lang.String)) {
						java.lang.String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
						name_ = s;
						return s;
					} else {
						return (java.lang.String) ref;
					}
				}

				/**
				 * <code>optional string name = 1;</code>
				 */
				@Override
				public com.google.protobuf.ByteString getNameBytes() {
					java.lang.Object ref = name_;
					if (ref instanceof String) {
						com.google.protobuf.ByteString b = com.google.protobuf.ByteString
								.copyFromUtf8((java.lang.String) ref);
						name_ = b;
						return b;
					} else {
						return (com.google.protobuf.ByteString) ref;
					}
				}

				/**
				 * <code>optional string name = 1;</code>
				 */
				public Builder setName(java.lang.String value) {
					if (value == null) {
						throw new NullPointerException();
					}
					bitField0_ |= 0x00000001;
					name_ = value;
					onChanged();
					return this;
				}

				/**
				 * <code>optional string name = 1;</code>
				 */
				public Builder clearName() {
					bitField0_ = (bitField0_ & ~0x00000001);
					name_ = getDefaultInstance().getName();
					onChanged();
					return this;
				}

				/**
				 * <code>optional string name = 1;</code>
				 */
				public Builder setNameBytes(com.google.protobuf.ByteString value) {
					if (value == null) {
						throw new NullPointerException();
					}
					bitField0_ |= 0x00000001;
					name_ = value;
					onChanged();
					return this;
				}

				// optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;
				private Ic3Data.Application.Component.ComponentKind kind_ = Ic3Data.Application.Component.ComponentKind.ACTIVITY;

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;</code>
				 */
				@Override
				public boolean hasKind() {
					return ((bitField0_ & 0x00000002) == 0x00000002);
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;</code>
				 */
				@Override
				public Ic3Data.Application.Component.ComponentKind getKind() {
					return kind_;
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;</code>
				 */
				public Builder setKind(Ic3Data.Application.Component.ComponentKind value) {
					if (value == null) {
						throw new NullPointerException();
					}
					bitField0_ |= 0x00000002;
					kind_ = value;
					onChanged();
					return this;
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.ComponentKind kind = 2;</code>
				 */
				public Builder clearKind() {
					bitField0_ = (bitField0_ & ~0x00000002);
					kind_ = Ic3Data.Application.Component.ComponentKind.ACTIVITY;
					onChanged();
					return this;
				}

				// optional bool exported = 3;
				private boolean exported_;

				/**
				 * <code>optional bool exported = 3;</code>
				 */
				@Override
				public boolean hasExported() {
					return ((bitField0_ & 0x00000004) == 0x00000004);
				}

				/**
				 * <code>optional bool exported = 3;</code>
				 */
				@Override
				public boolean getExported() {
					return exported_;
				}

				/**
				 * <code>optional bool exported = 3;</code>
				 */
				public Builder setExported(boolean value) {
					bitField0_ |= 0x00000004;
					exported_ = value;
					onChanged();
					return this;
				}

				/**
				 * <code>optional bool exported = 3;</code>
				 */
				public Builder clearExported() {
					bitField0_ = (bitField0_ & ~0x00000004);
					exported_ = false;
					onChanged();
					return this;
				}

				// optional string permission = 4;
				private java.lang.Object permission_ = "";

				/**
				 * <code>optional string permission = 4;</code>
				 */
				@Override
				public boolean hasPermission() {
					return ((bitField0_ & 0x00000008) == 0x00000008);
				}

				/**
				 * <code>optional string permission = 4;</code>
				 */
				@Override
				public java.lang.String getPermission() {
					java.lang.Object ref = permission_;
					if (!(ref instanceof java.lang.String)) {
						java.lang.String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
						permission_ = s;
						return s;
					} else {
						return (java.lang.String) ref;
					}
				}

				/**
				 * <code>optional string permission = 4;</code>
				 */
				@Override
				public com.google.protobuf.ByteString getPermissionBytes() {
					java.lang.Object ref = permission_;
					if (ref instanceof String) {
						com.google.protobuf.ByteString b = com.google.protobuf.ByteString
								.copyFromUtf8((java.lang.String) ref);
						permission_ = b;
						return b;
					} else {
						return (com.google.protobuf.ByteString) ref;
					}
				}

				/**
				 * <code>optional string permission = 4;</code>
				 */
				public Builder setPermission(java.lang.String value) {
					if (value == null) {
						throw new NullPointerException();
					}
					bitField0_ |= 0x00000008;
					permission_ = value;
					onChanged();
					return this;
				}

				/**
				 * <code>optional string permission = 4;</code>
				 */
				public Builder clearPermission() {
					bitField0_ = (bitField0_ & ~0x00000008);
					permission_ = getDefaultInstance().getPermission();
					onChanged();
					return this;
				}

				/**
				 * <code>optional string permission = 4;</code>
				 */
				public Builder setPermissionBytes(com.google.protobuf.ByteString value) {
					if (value == null) {
						throw new NullPointerException();
					}
					bitField0_ |= 0x00000008;
					permission_ = value;
					onChanged();
					return this;
				}

				// optional uint32 missing = 5;
				private int missing_;

				/**
				 * <code>optional uint32 missing = 5;</code>
				 */
				@Override
				public boolean hasMissing() {
					return ((bitField0_ & 0x00000010) == 0x00000010);
				}

				/**
				 * <code>optional uint32 missing = 5;</code>
				 */
				@Override
				public int getMissing() {
					return missing_;
				}

				/**
				 * <code>optional uint32 missing = 5;</code>
				 */
				public Builder setMissing(int value) {
					bitField0_ |= 0x00000010;
					missing_ = value;
					onChanged();
					return this;
				}

				/**
				 * <code>optional uint32 missing = 5;</code>
				 */
				public Builder clearMissing() {
					bitField0_ = (bitField0_ & ~0x00000010);
					missing_ = 0;
					onChanged();
					return this;
				}

				// repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;
				private java.util.List<Ic3Data.Application.Component.Extra> extras_ = java.util.Collections.emptyList();

				private void ensureExtrasIsMutable() {
					if (!((bitField0_ & 0x00000020) == 0x00000020)) {
						extras_ = new java.util.ArrayList<Ic3Data.Application.Component.Extra>(extras_);
						bitField0_ |= 0x00000020;
					}
				}

				private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component.Extra, Ic3Data.Application.Component.Extra.Builder, Ic3Data.Application.Component.ExtraOrBuilder> extrasBuilder_;

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				@Override
				public java.util.List<Ic3Data.Application.Component.Extra> getExtrasList() {
					if (extrasBuilder_ == null) {
						return java.util.Collections.unmodifiableList(extras_);
					} else {
						return extrasBuilder_.getMessageList();
					}
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				@Override
				public int getExtrasCount() {
					if (extrasBuilder_ == null) {
						return extras_.size();
					} else {
						return extrasBuilder_.getCount();
					}
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				@Override
				public Ic3Data.Application.Component.Extra getExtras(int index) {
					if (extrasBuilder_ == null) {
						return extras_.get(index);
					} else {
						return extrasBuilder_.getMessage(index);
					}
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				public Builder setExtras(int index, Ic3Data.Application.Component.Extra value) {
					if (extrasBuilder_ == null) {
						if (value == null) {
							throw new NullPointerException();
						}
						ensureExtrasIsMutable();
						extras_.set(index, value);
						onChanged();
					} else {
						extrasBuilder_.setMessage(index, value);
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				public Builder setExtras(int index, Ic3Data.Application.Component.Extra.Builder builderForValue) {
					if (extrasBuilder_ == null) {
						ensureExtrasIsMutable();
						extras_.set(index, builderForValue.build());
						onChanged();
					} else {
						extrasBuilder_.setMessage(index, builderForValue.build());
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				public Builder addExtras(Ic3Data.Application.Component.Extra value) {
					if (extrasBuilder_ == null) {
						if (value == null) {
							throw new NullPointerException();
						}
						ensureExtrasIsMutable();
						extras_.add(value);
						onChanged();
					} else {
						extrasBuilder_.addMessage(value);
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				public Builder addExtras(int index, Ic3Data.Application.Component.Extra value) {
					if (extrasBuilder_ == null) {
						if (value == null) {
							throw new NullPointerException();
						}
						ensureExtrasIsMutable();
						extras_.add(index, value);
						onChanged();
					} else {
						extrasBuilder_.addMessage(index, value);
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				public Builder addExtras(Ic3Data.Application.Component.Extra.Builder builderForValue) {
					if (extrasBuilder_ == null) {
						ensureExtrasIsMutable();
						extras_.add(builderForValue.build());
						onChanged();
					} else {
						extrasBuilder_.addMessage(builderForValue.build());
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				public Builder addExtras(int index, Ic3Data.Application.Component.Extra.Builder builderForValue) {
					if (extrasBuilder_ == null) {
						ensureExtrasIsMutable();
						extras_.add(index, builderForValue.build());
						onChanged();
					} else {
						extrasBuilder_.addMessage(index, builderForValue.build());
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				public Builder addAllExtras(java.lang.Iterable<? extends Ic3Data.Application.Component.Extra> values) {
					if (extrasBuilder_ == null) {
						ensureExtrasIsMutable();
						super.addAll(values, extras_);
						onChanged();
					} else {
						extrasBuilder_.addAllMessages(values);
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				public Builder clearExtras() {
					if (extrasBuilder_ == null) {
						extras_ = java.util.Collections.emptyList();
						bitField0_ = (bitField0_ & ~0x00000020);
						onChanged();
					} else {
						extrasBuilder_.clear();
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				public Builder removeExtras(int index) {
					if (extrasBuilder_ == null) {
						ensureExtrasIsMutable();
						extras_.remove(index);
						onChanged();
					} else {
						extrasBuilder_.remove(index);
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				public Ic3Data.Application.Component.Extra.Builder getExtrasBuilder(int index) {
					return getExtrasFieldBuilder().getBuilder(index);
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				@Override
				public Ic3Data.Application.Component.ExtraOrBuilder getExtrasOrBuilder(int index) {
					if (extrasBuilder_ == null) {
						return extras_.get(index);
					} else {
						return extrasBuilder_.getMessageOrBuilder(index);
					}
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				@Override
				public java.util.List<? extends Ic3Data.Application.Component.ExtraOrBuilder> getExtrasOrBuilderList() {
					if (extrasBuilder_ != null) {
						return extrasBuilder_.getMessageOrBuilderList();
					} else {
						return java.util.Collections.unmodifiableList(extras_);
					}
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				public Ic3Data.Application.Component.Extra.Builder addExtrasBuilder() {
					return getExtrasFieldBuilder().addBuilder(Ic3Data.Application.Component.Extra.getDefaultInstance());
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				public Ic3Data.Application.Component.Extra.Builder addExtrasBuilder(int index) {
					return getExtrasFieldBuilder().addBuilder(index,
							Ic3Data.Application.Component.Extra.getDefaultInstance());
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.Extra extras = 6;</code>
				 */
				public java.util.List<Ic3Data.Application.Component.Extra.Builder> getExtrasBuilderList() {
					return getExtrasFieldBuilder().getBuilderList();
				}

				private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component.Extra, Ic3Data.Application.Component.Extra.Builder, Ic3Data.Application.Component.ExtraOrBuilder> getExtrasFieldBuilder() {
					if (extrasBuilder_ == null) {
						extrasBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component.Extra, Ic3Data.Application.Component.Extra.Builder, Ic3Data.Application.Component.ExtraOrBuilder>(
								extras_, ((bitField0_ & 0x00000020) == 0x00000020), getParentForChildren(), isClean());
						extras_ = null;
					}
					return extrasBuilder_;
				}

				// optional string alias_target = 7;
				private java.lang.Object aliasTarget_ = "";

				/**
				 * <code>optional string alias_target = 7;</code>
				 */
				@Override
				public boolean hasAliasTarget() {
					return ((bitField0_ & 0x00000040) == 0x00000040);
				}

				/**
				 * <code>optional string alias_target = 7;</code>
				 */
				@Override
				public java.lang.String getAliasTarget() {
					java.lang.Object ref = aliasTarget_;
					if (!(ref instanceof java.lang.String)) {
						java.lang.String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
						aliasTarget_ = s;
						return s;
					} else {
						return (java.lang.String) ref;
					}
				}

				/**
				 * <code>optional string alias_target = 7;</code>
				 */
				@Override
				public com.google.protobuf.ByteString getAliasTargetBytes() {
					java.lang.Object ref = aliasTarget_;
					if (ref instanceof String) {
						com.google.protobuf.ByteString b = com.google.protobuf.ByteString
								.copyFromUtf8((java.lang.String) ref);
						aliasTarget_ = b;
						return b;
					} else {
						return (com.google.protobuf.ByteString) ref;
					}
				}

				/**
				 * <code>optional string alias_target = 7;</code>
				 */
				public Builder setAliasTarget(java.lang.String value) {
					if (value == null) {
						throw new NullPointerException();
					}
					bitField0_ |= 0x00000040;
					aliasTarget_ = value;
					onChanged();
					return this;
				}

				/**
				 * <code>optional string alias_target = 7;</code>
				 */
				public Builder clearAliasTarget() {
					bitField0_ = (bitField0_ & ~0x00000040);
					aliasTarget_ = getDefaultInstance().getAliasTarget();
					onChanged();
					return this;
				}

				/**
				 * <code>optional string alias_target = 7;</code>
				 */
				public Builder setAliasTargetBytes(com.google.protobuf.ByteString value) {
					if (value == null) {
						throw new NullPointerException();
					}
					bitField0_ |= 0x00000040;
					aliasTarget_ = value;
					onChanged();
					return this;
				}

				// optional bool grant_uri_permissions = 8;
				private boolean grantUriPermissions_;

				/**
				 * <code>optional bool grant_uri_permissions = 8;</code>
				 */
				@Override
				public boolean hasGrantUriPermissions() {
					return ((bitField0_ & 0x00000080) == 0x00000080);
				}

				/**
				 * <code>optional bool grant_uri_permissions = 8;</code>
				 */
				@Override
				public boolean getGrantUriPermissions() {
					return grantUriPermissions_;
				}

				/**
				 * <code>optional bool grant_uri_permissions = 8;</code>
				 */
				public Builder setGrantUriPermissions(boolean value) {
					bitField0_ |= 0x00000080;
					grantUriPermissions_ = value;
					onChanged();
					return this;
				}

				/**
				 * <code>optional bool grant_uri_permissions = 8;</code>
				 */
				public Builder clearGrantUriPermissions() {
					bitField0_ = (bitField0_ & ~0x00000080);
					grantUriPermissions_ = false;
					onChanged();
					return this;
				}

				// optional string read_permission = 9;
				private java.lang.Object readPermission_ = "";

				/**
				 * <code>optional string read_permission = 9;</code>
				 */
				@Override
				public boolean hasReadPermission() {
					return ((bitField0_ & 0x00000100) == 0x00000100);
				}

				/**
				 * <code>optional string read_permission = 9;</code>
				 */
				@Override
				public java.lang.String getReadPermission() {
					java.lang.Object ref = readPermission_;
					if (!(ref instanceof java.lang.String)) {
						java.lang.String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
						readPermission_ = s;
						return s;
					} else {
						return (java.lang.String) ref;
					}
				}

				/**
				 * <code>optional string read_permission = 9;</code>
				 */
				@Override
				public com.google.protobuf.ByteString getReadPermissionBytes() {
					java.lang.Object ref = readPermission_;
					if (ref instanceof String) {
						com.google.protobuf.ByteString b = com.google.protobuf.ByteString
								.copyFromUtf8((java.lang.String) ref);
						readPermission_ = b;
						return b;
					} else {
						return (com.google.protobuf.ByteString) ref;
					}
				}

				/**
				 * <code>optional string read_permission = 9;</code>
				 */
				public Builder setReadPermission(java.lang.String value) {
					if (value == null) {
						throw new NullPointerException();
					}
					bitField0_ |= 0x00000100;
					readPermission_ = value;
					onChanged();
					return this;
				}

				/**
				 * <code>optional string read_permission = 9;</code>
				 */
				public Builder clearReadPermission() {
					bitField0_ = (bitField0_ & ~0x00000100);
					readPermission_ = getDefaultInstance().getReadPermission();
					onChanged();
					return this;
				}

				/**
				 * <code>optional string read_permission = 9;</code>
				 */
				public Builder setReadPermissionBytes(com.google.protobuf.ByteString value) {
					if (value == null) {
						throw new NullPointerException();
					}
					bitField0_ |= 0x00000100;
					readPermission_ = value;
					onChanged();
					return this;
				}

				// optional string write_permission = 10;
				private java.lang.Object writePermission_ = "";

				/**
				 * <code>optional string write_permission = 10;</code>
				 */
				@Override
				public boolean hasWritePermission() {
					return ((bitField0_ & 0x00000200) == 0x00000200);
				}

				/**
				 * <code>optional string write_permission = 10;</code>
				 */
				@Override
				public java.lang.String getWritePermission() {
					java.lang.Object ref = writePermission_;
					if (!(ref instanceof java.lang.String)) {
						java.lang.String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
						writePermission_ = s;
						return s;
					} else {
						return (java.lang.String) ref;
					}
				}

				/**
				 * <code>optional string write_permission = 10;</code>
				 */
				@Override
				public com.google.protobuf.ByteString getWritePermissionBytes() {
					java.lang.Object ref = writePermission_;
					if (ref instanceof String) {
						com.google.protobuf.ByteString b = com.google.protobuf.ByteString
								.copyFromUtf8((java.lang.String) ref);
						writePermission_ = b;
						return b;
					} else {
						return (com.google.protobuf.ByteString) ref;
					}
				}

				/**
				 * <code>optional string write_permission = 10;</code>
				 */
				public Builder setWritePermission(java.lang.String value) {
					if (value == null) {
						throw new NullPointerException();
					}
					bitField0_ |= 0x00000200;
					writePermission_ = value;
					onChanged();
					return this;
				}

				/**
				 * <code>optional string write_permission = 10;</code>
				 */
				public Builder clearWritePermission() {
					bitField0_ = (bitField0_ & ~0x00000200);
					writePermission_ = getDefaultInstance().getWritePermission();
					onChanged();
					return this;
				}

				/**
				 * <code>optional string write_permission = 10;</code>
				 */
				public Builder setWritePermissionBytes(com.google.protobuf.ByteString value) {
					if (value == null) {
						throw new NullPointerException();
					}
					bitField0_ |= 0x00000200;
					writePermission_ = value;
					onChanged();
					return this;
				}

				// repeated string authorities = 11;
				private com.google.protobuf.LazyStringList authorities_ = com.google.protobuf.LazyStringArrayList.EMPTY;

				private void ensureAuthoritiesIsMutable() {
					if (!((bitField0_ & 0x00000400) == 0x00000400)) {
						authorities_ = new com.google.protobuf.LazyStringArrayList(authorities_);
						bitField0_ |= 0x00000400;
					}
				}

				/**
				 * <code>repeated string authorities = 11;</code>
				 */
				@Override
				public java.util.List<java.lang.String> getAuthoritiesList() {
					return java.util.Collections.unmodifiableList(authorities_);
				}

				/**
				 * <code>repeated string authorities = 11;</code>
				 */
				@Override
				public int getAuthoritiesCount() {
					return authorities_.size();
				}

				/**
				 * <code>repeated string authorities = 11;</code>
				 */
				@Override
				public java.lang.String getAuthorities(int index) {
					return authorities_.get(index);
				}

				/**
				 * <code>repeated string authorities = 11;</code>
				 */
				@Override
				public com.google.protobuf.ByteString getAuthoritiesBytes(int index) {
					return authorities_.getByteString(index);
				}

				/**
				 * <code>repeated string authorities = 11;</code>
				 */
				public Builder setAuthorities(int index, java.lang.String value) {
					if (value == null) {
						throw new NullPointerException();
					}
					ensureAuthoritiesIsMutable();
					authorities_.set(index, value);
					onChanged();
					return this;
				}

				/**
				 * <code>repeated string authorities = 11;</code>
				 */
				public Builder addAuthorities(java.lang.String value) {
					if (value == null) {
						throw new NullPointerException();
					}
					ensureAuthoritiesIsMutable();
					authorities_.add(value);
					onChanged();
					return this;
				}

				/**
				 * <code>repeated string authorities = 11;</code>
				 */
				public Builder addAllAuthorities(java.lang.Iterable<java.lang.String> values) {
					ensureAuthoritiesIsMutable();
					super.addAll(values, authorities_);
					onChanged();
					return this;
				}

				/**
				 * <code>repeated string authorities = 11;</code>
				 */
				public Builder clearAuthorities() {
					authorities_ = com.google.protobuf.LazyStringArrayList.EMPTY;
					bitField0_ = (bitField0_ & ~0x00000400);
					onChanged();
					return this;
				}

				/**
				 * <code>repeated string authorities = 11;</code>
				 */
				public Builder addAuthoritiesBytes(com.google.protobuf.ByteString value) {
					if (value == null) {
						throw new NullPointerException();
					}
					ensureAuthoritiesIsMutable();
					authorities_.add(value);
					onChanged();
					return this;
				}

				// repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter
				// intent_filters = 12;
				private java.util.List<Ic3Data.Application.Component.IntentFilter> intentFilters_ = java.util.Collections
						.emptyList();

				private void ensureIntentFiltersIsMutable() {
					if (!((bitField0_ & 0x00000800) == 0x00000800)) {
						intentFilters_ = new java.util.ArrayList<Ic3Data.Application.Component.IntentFilter>(
								intentFilters_);
						bitField0_ |= 0x00000800;
					}
				}

				private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component.IntentFilter, Ic3Data.Application.Component.IntentFilter.Builder, Ic3Data.Application.Component.IntentFilterOrBuilder> intentFiltersBuilder_;

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				@Override
				public java.util.List<Ic3Data.Application.Component.IntentFilter> getIntentFiltersList() {
					if (intentFiltersBuilder_ == null) {
						return java.util.Collections.unmodifiableList(intentFilters_);
					} else {
						return intentFiltersBuilder_.getMessageList();
					}
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				@Override
				public int getIntentFiltersCount() {
					if (intentFiltersBuilder_ == null) {
						return intentFilters_.size();
					} else {
						return intentFiltersBuilder_.getCount();
					}
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				@Override
				public Ic3Data.Application.Component.IntentFilter getIntentFilters(int index) {
					if (intentFiltersBuilder_ == null) {
						return intentFilters_.get(index);
					} else {
						return intentFiltersBuilder_.getMessage(index);
					}
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				public Builder setIntentFilters(int index, Ic3Data.Application.Component.IntentFilter value) {
					if (intentFiltersBuilder_ == null) {
						if (value == null) {
							throw new NullPointerException();
						}
						ensureIntentFiltersIsMutable();
						intentFilters_.set(index, value);
						onChanged();
					} else {
						intentFiltersBuilder_.setMessage(index, value);
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				public Builder setIntentFilters(int index,
						Ic3Data.Application.Component.IntentFilter.Builder builderForValue) {
					if (intentFiltersBuilder_ == null) {
						ensureIntentFiltersIsMutable();
						intentFilters_.set(index, builderForValue.build());
						onChanged();
					} else {
						intentFiltersBuilder_.setMessage(index, builderForValue.build());
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				public Builder addIntentFilters(Ic3Data.Application.Component.IntentFilter value) {
					if (intentFiltersBuilder_ == null) {
						if (value == null) {
							throw new NullPointerException();
						}
						ensureIntentFiltersIsMutable();
						intentFilters_.add(value);
						onChanged();
					} else {
						intentFiltersBuilder_.addMessage(value);
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				public Builder addIntentFilters(int index, Ic3Data.Application.Component.IntentFilter value) {
					if (intentFiltersBuilder_ == null) {
						if (value == null) {
							throw new NullPointerException();
						}
						ensureIntentFiltersIsMutable();
						intentFilters_.add(index, value);
						onChanged();
					} else {
						intentFiltersBuilder_.addMessage(index, value);
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				public Builder addIntentFilters(Ic3Data.Application.Component.IntentFilter.Builder builderForValue) {
					if (intentFiltersBuilder_ == null) {
						ensureIntentFiltersIsMutable();
						intentFilters_.add(builderForValue.build());
						onChanged();
					} else {
						intentFiltersBuilder_.addMessage(builderForValue.build());
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				public Builder addIntentFilters(int index,
						Ic3Data.Application.Component.IntentFilter.Builder builderForValue) {
					if (intentFiltersBuilder_ == null) {
						ensureIntentFiltersIsMutable();
						intentFilters_.add(index, builderForValue.build());
						onChanged();
					} else {
						intentFiltersBuilder_.addMessage(index, builderForValue.build());
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				public Builder addAllIntentFilters(
						java.lang.Iterable<? extends Ic3Data.Application.Component.IntentFilter> values) {
					if (intentFiltersBuilder_ == null) {
						ensureIntentFiltersIsMutable();
						super.addAll(values, intentFilters_);
						onChanged();
					} else {
						intentFiltersBuilder_.addAllMessages(values);
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				public Builder clearIntentFilters() {
					if (intentFiltersBuilder_ == null) {
						intentFilters_ = java.util.Collections.emptyList();
						bitField0_ = (bitField0_ & ~0x00000800);
						onChanged();
					} else {
						intentFiltersBuilder_.clear();
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				public Builder removeIntentFilters(int index) {
					if (intentFiltersBuilder_ == null) {
						ensureIntentFiltersIsMutable();
						intentFilters_.remove(index);
						onChanged();
					} else {
						intentFiltersBuilder_.remove(index);
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				public Ic3Data.Application.Component.IntentFilter.Builder getIntentFiltersBuilder(int index) {
					return getIntentFiltersFieldBuilder().getBuilder(index);
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				@Override
				public Ic3Data.Application.Component.IntentFilterOrBuilder getIntentFiltersOrBuilder(int index) {
					if (intentFiltersBuilder_ == null) {
						return intentFilters_.get(index);
					} else {
						return intentFiltersBuilder_.getMessageOrBuilder(index);
					}
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				@Override
				public java.util.List<? extends Ic3Data.Application.Component.IntentFilterOrBuilder> getIntentFiltersOrBuilderList() {
					if (intentFiltersBuilder_ != null) {
						return intentFiltersBuilder_.getMessageOrBuilderList();
					} else {
						return java.util.Collections.unmodifiableList(intentFilters_);
					}
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				public Ic3Data.Application.Component.IntentFilter.Builder addIntentFiltersBuilder() {
					return getIntentFiltersFieldBuilder()
							.addBuilder(Ic3Data.Application.Component.IntentFilter.getDefaultInstance());
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				public Ic3Data.Application.Component.IntentFilter.Builder addIntentFiltersBuilder(int index) {
					return getIntentFiltersFieldBuilder().addBuilder(index,
							Ic3Data.Application.Component.IntentFilter.getDefaultInstance());
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.IntentFilter intent_filters = 12;</code>
				 */
				public java.util.List<Ic3Data.Application.Component.IntentFilter.Builder> getIntentFiltersBuilderList() {
					return getIntentFiltersFieldBuilder().getBuilderList();
				}

				private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component.IntentFilter, Ic3Data.Application.Component.IntentFilter.Builder, Ic3Data.Application.Component.IntentFilterOrBuilder> getIntentFiltersFieldBuilder() {
					if (intentFiltersBuilder_ == null) {
						intentFiltersBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component.IntentFilter, Ic3Data.Application.Component.IntentFilter.Builder, Ic3Data.Application.Component.IntentFilterOrBuilder>(
								intentFilters_, ((bitField0_ & 0x00000800) == 0x00000800), getParentForChildren(),
								isClean());
						intentFilters_ = null;
					}
					return intentFiltersBuilder_;
				}

				// repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points =
				// 13;
				private java.util.List<Ic3Data.Application.Component.ExitPoint> exitPoints_ = java.util.Collections
						.emptyList();

				private void ensureExitPointsIsMutable() {
					if (!((bitField0_ & 0x00001000) == 0x00001000)) {
						exitPoints_ = new java.util.ArrayList<Ic3Data.Application.Component.ExitPoint>(exitPoints_);
						bitField0_ |= 0x00001000;
					}
				}

				private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component.ExitPoint, Ic3Data.Application.Component.ExitPoint.Builder, Ic3Data.Application.Component.ExitPointOrBuilder> exitPointsBuilder_;

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				@Override
				public java.util.List<Ic3Data.Application.Component.ExitPoint> getExitPointsList() {
					if (exitPointsBuilder_ == null) {
						return java.util.Collections.unmodifiableList(exitPoints_);
					} else {
						return exitPointsBuilder_.getMessageList();
					}
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				@Override
				public int getExitPointsCount() {
					if (exitPointsBuilder_ == null) {
						return exitPoints_.size();
					} else {
						return exitPointsBuilder_.getCount();
					}
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				@Override
				public Ic3Data.Application.Component.ExitPoint getExitPoints(int index) {
					if (exitPointsBuilder_ == null) {
						return exitPoints_.get(index);
					} else {
						return exitPointsBuilder_.getMessage(index);
					}
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				public Builder setExitPoints(int index, Ic3Data.Application.Component.ExitPoint value) {
					if (exitPointsBuilder_ == null) {
						if (value == null) {
							throw new NullPointerException();
						}
						ensureExitPointsIsMutable();
						exitPoints_.set(index, value);
						onChanged();
					} else {
						exitPointsBuilder_.setMessage(index, value);
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				public Builder setExitPoints(int index,
						Ic3Data.Application.Component.ExitPoint.Builder builderForValue) {
					if (exitPointsBuilder_ == null) {
						ensureExitPointsIsMutable();
						exitPoints_.set(index, builderForValue.build());
						onChanged();
					} else {
						exitPointsBuilder_.setMessage(index, builderForValue.build());
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				public Builder addExitPoints(Ic3Data.Application.Component.ExitPoint value) {
					if (exitPointsBuilder_ == null) {
						if (value == null) {
							throw new NullPointerException();
						}
						ensureExitPointsIsMutable();
						exitPoints_.add(value);
						onChanged();
					} else {
						exitPointsBuilder_.addMessage(value);
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				public Builder addExitPoints(int index, Ic3Data.Application.Component.ExitPoint value) {
					if (exitPointsBuilder_ == null) {
						if (value == null) {
							throw new NullPointerException();
						}
						ensureExitPointsIsMutable();
						exitPoints_.add(index, value);
						onChanged();
					} else {
						exitPointsBuilder_.addMessage(index, value);
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				public Builder addExitPoints(Ic3Data.Application.Component.ExitPoint.Builder builderForValue) {
					if (exitPointsBuilder_ == null) {
						ensureExitPointsIsMutable();
						exitPoints_.add(builderForValue.build());
						onChanged();
					} else {
						exitPointsBuilder_.addMessage(builderForValue.build());
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				public Builder addExitPoints(int index,
						Ic3Data.Application.Component.ExitPoint.Builder builderForValue) {
					if (exitPointsBuilder_ == null) {
						ensureExitPointsIsMutable();
						exitPoints_.add(index, builderForValue.build());
						onChanged();
					} else {
						exitPointsBuilder_.addMessage(index, builderForValue.build());
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				public Builder addAllExitPoints(
						java.lang.Iterable<? extends Ic3Data.Application.Component.ExitPoint> values) {
					if (exitPointsBuilder_ == null) {
						ensureExitPointsIsMutable();
						super.addAll(values, exitPoints_);
						onChanged();
					} else {
						exitPointsBuilder_.addAllMessages(values);
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				public Builder clearExitPoints() {
					if (exitPointsBuilder_ == null) {
						exitPoints_ = java.util.Collections.emptyList();
						bitField0_ = (bitField0_ & ~0x00001000);
						onChanged();
					} else {
						exitPointsBuilder_.clear();
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				public Builder removeExitPoints(int index) {
					if (exitPointsBuilder_ == null) {
						ensureExitPointsIsMutable();
						exitPoints_.remove(index);
						onChanged();
					} else {
						exitPointsBuilder_.remove(index);
					}
					return this;
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				public Ic3Data.Application.Component.ExitPoint.Builder getExitPointsBuilder(int index) {
					return getExitPointsFieldBuilder().getBuilder(index);
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				@Override
				public Ic3Data.Application.Component.ExitPointOrBuilder getExitPointsOrBuilder(int index) {
					if (exitPointsBuilder_ == null) {
						return exitPoints_.get(index);
					} else {
						return exitPointsBuilder_.getMessageOrBuilder(index);
					}
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				@Override
				public java.util.List<? extends Ic3Data.Application.Component.ExitPointOrBuilder> getExitPointsOrBuilderList() {
					if (exitPointsBuilder_ != null) {
						return exitPointsBuilder_.getMessageOrBuilderList();
					} else {
						return java.util.Collections.unmodifiableList(exitPoints_);
					}
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				public Ic3Data.Application.Component.ExitPoint.Builder addExitPointsBuilder() {
					return getExitPointsFieldBuilder()
							.addBuilder(Ic3Data.Application.Component.ExitPoint.getDefaultInstance());
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				public Ic3Data.Application.Component.ExitPoint.Builder addExitPointsBuilder(int index) {
					return getExitPointsFieldBuilder().addBuilder(index,
							Ic3Data.Application.Component.ExitPoint.getDefaultInstance());
				}

				/**
				 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component.ExitPoint exit_points = 13;</code>
				 */
				public java.util.List<Ic3Data.Application.Component.ExitPoint.Builder> getExitPointsBuilderList() {
					return getExitPointsFieldBuilder().getBuilderList();
				}

				private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component.ExitPoint, Ic3Data.Application.Component.ExitPoint.Builder, Ic3Data.Application.Component.ExitPointOrBuilder> getExitPointsFieldBuilder() {
					if (exitPointsBuilder_ == null) {
						exitPointsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component.ExitPoint, Ic3Data.Application.Component.ExitPoint.Builder, Ic3Data.Application.Component.ExitPointOrBuilder>(
								exitPoints_, ((bitField0_ & 0x00001000) == 0x00001000), getParentForChildren(),
								isClean());
						exitPoints_ = null;
					}
					return exitPointsBuilder_;
				}

				// optional .edu.psu.cse.siis.ic3.Application.Component.Instruction
				// registration_instruction = 14;
				private Ic3Data.Application.Component.Instruction registrationInstruction_ = Ic3Data.Application.Component.Instruction
						.getDefaultInstance();
				private com.google.protobuf.SingleFieldBuilder<Ic3Data.Application.Component.Instruction, Ic3Data.Application.Component.Instruction.Builder, Ic3Data.Application.Component.InstructionOrBuilder> registrationInstructionBuilder_;

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction registration_instruction = 14;</code>
				 */
				@Override
				public boolean hasRegistrationInstruction() {
					return ((bitField0_ & 0x00002000) == 0x00002000);
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction registration_instruction = 14;</code>
				 */
				@Override
				public Ic3Data.Application.Component.Instruction getRegistrationInstruction() {
					if (registrationInstructionBuilder_ == null) {
						return registrationInstruction_;
					} else {
						return registrationInstructionBuilder_.getMessage();
					}
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction registration_instruction = 14;</code>
				 */
				public Builder setRegistrationInstruction(Ic3Data.Application.Component.Instruction value) {
					if (registrationInstructionBuilder_ == null) {
						if (value == null) {
							throw new NullPointerException();
						}
						registrationInstruction_ = value;
						onChanged();
					} else {
						registrationInstructionBuilder_.setMessage(value);
					}
					bitField0_ |= 0x00002000;
					return this;
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction registration_instruction = 14;</code>
				 */
				public Builder setRegistrationInstruction(
						Ic3Data.Application.Component.Instruction.Builder builderForValue) {
					if (registrationInstructionBuilder_ == null) {
						registrationInstruction_ = builderForValue.build();
						onChanged();
					} else {
						registrationInstructionBuilder_.setMessage(builderForValue.build());
					}
					bitField0_ |= 0x00002000;
					return this;
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction registration_instruction = 14;</code>
				 */
				public Builder mergeRegistrationInstruction(Ic3Data.Application.Component.Instruction value) {
					if (registrationInstructionBuilder_ == null) {
						if (((bitField0_ & 0x00002000) == 0x00002000)
								&& registrationInstruction_ != Ic3Data.Application.Component.Instruction
										.getDefaultInstance()) {
							registrationInstruction_ = Ic3Data.Application.Component.Instruction
									.newBuilder(registrationInstruction_).mergeFrom(value).buildPartial();
						} else {
							registrationInstruction_ = value;
						}
						onChanged();
					} else {
						registrationInstructionBuilder_.mergeFrom(value);
					}
					bitField0_ |= 0x00002000;
					return this;
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction registration_instruction = 14;</code>
				 */
				public Builder clearRegistrationInstruction() {
					if (registrationInstructionBuilder_ == null) {
						registrationInstruction_ = Ic3Data.Application.Component.Instruction.getDefaultInstance();
						onChanged();
					} else {
						registrationInstructionBuilder_.clear();
					}
					bitField0_ = (bitField0_ & ~0x00002000);
					return this;
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction registration_instruction = 14;</code>
				 */
				public Ic3Data.Application.Component.Instruction.Builder getRegistrationInstructionBuilder() {
					bitField0_ |= 0x00002000;
					onChanged();
					return getRegistrationInstructionFieldBuilder().getBuilder();
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction registration_instruction = 14;</code>
				 */
				@Override
				public Ic3Data.Application.Component.InstructionOrBuilder getRegistrationInstructionOrBuilder() {
					if (registrationInstructionBuilder_ != null) {
						return registrationInstructionBuilder_.getMessageOrBuilder();
					} else {
						return registrationInstruction_;
					}
				}

				/**
				 * <code>optional .edu.psu.cse.siis.ic3.Application.Component.Instruction registration_instruction = 14;</code>
				 */
				private com.google.protobuf.SingleFieldBuilder<Ic3Data.Application.Component.Instruction, Ic3Data.Application.Component.Instruction.Builder, Ic3Data.Application.Component.InstructionOrBuilder> getRegistrationInstructionFieldBuilder() {
					if (registrationInstructionBuilder_ == null) {
						registrationInstructionBuilder_ = new com.google.protobuf.SingleFieldBuilder<Ic3Data.Application.Component.Instruction, Ic3Data.Application.Component.Instruction.Builder, Ic3Data.Application.Component.InstructionOrBuilder>(
								registrationInstruction_, getParentForChildren(), isClean());
						registrationInstruction_ = null;
					}
					return registrationInstructionBuilder_;
				}

				// @@protoc_insertion_point(builder_scope:edu.psu.cse.siis.ic3.Application.Component)
			}

			static {
				defaultInstance = new Component(true);
				defaultInstance.initFields();
			}

			public App getApp() {
				return app;
			}

			public void setApp(App app) {
				this.app = app;
			}

			// @@protoc_insertion_point(class_scope:edu.psu.cse.siis.ic3.Application.Component)
		}

		private int bitField0_;
		// optional string name = 1;
		public static final int NAME_FIELD_NUMBER = 1;
		private java.lang.Object name_;

		/**
		 * <code>optional string name = 1;</code>
		 */
		@Override
		public boolean hasName() {
			return ((bitField0_ & 0x00000001) == 0x00000001);
		}

		/**
		 * <code>optional string name = 1;</code>
		 */
		@Override
		public java.lang.String getName() {
			java.lang.Object ref = name_;
			if (ref instanceof java.lang.String) {
				return (java.lang.String) ref;
			} else {
				com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
				java.lang.String s = bs.toStringUtf8();
				if (bs.isValidUtf8()) {
					name_ = s;
				}
				return s;
			}
		}

		/**
		 * <code>optional string name = 1;</code>
		 */
		@Override
		public com.google.protobuf.ByteString getNameBytes() {
			java.lang.Object ref = name_;
			if (ref instanceof java.lang.String) {
				com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
				name_ = b;
				return b;
			} else {
				return (com.google.protobuf.ByteString) ref;
			}
		}

		// optional uint32 version = 2;
		public static final int VERSION_FIELD_NUMBER = 2;
		private int version_;

		/**
		 * <code>optional uint32 version = 2;</code>
		 */
		@Override
		public boolean hasVersion() {
			return ((bitField0_ & 0x00000002) == 0x00000002);
		}

		/**
		 * <code>optional uint32 version = 2;</code>
		 */
		@Override
		public int getVersion() {
			return version_;
		}

		// repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;
		public static final int PERMISSIONS_FIELD_NUMBER = 3;
		private java.util.List<Ic3Data.Application.Permission> permissions_;

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
		 */
		@Override
		public java.util.List<Ic3Data.Application.Permission> getPermissionsList() {
			return permissions_;
		}

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
		 */
		@Override
		public java.util.List<? extends Ic3Data.Application.PermissionOrBuilder> getPermissionsOrBuilderList() {
			return permissions_;
		}

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
		 */
		@Override
		public int getPermissionsCount() {
			return permissions_.size();
		}

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
		 */
		@Override
		public Ic3Data.Application.Permission getPermissions(int index) {
			return permissions_.get(index);
		}

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
		 */
		@Override
		public Ic3Data.Application.PermissionOrBuilder getPermissionsOrBuilder(int index) {
			return permissions_.get(index);
		}

		// repeated string used_permissions = 4;
		public static final int USED_PERMISSIONS_FIELD_NUMBER = 4;
		private com.google.protobuf.LazyStringList usedPermissions_;

		/**
		 * <code>repeated string used_permissions = 4;</code>
		 */
		@Override
		public java.util.List<java.lang.String> getUsedPermissionsList() {
			return usedPermissions_;
		}

		/**
		 * <code>repeated string used_permissions = 4;</code>
		 */
		@Override
		public int getUsedPermissionsCount() {
			return usedPermissions_.size();
		}

		/**
		 * <code>repeated string used_permissions = 4;</code>
		 */
		@Override
		public java.lang.String getUsedPermissions(int index) {
			return usedPermissions_.get(index);
		}

		/**
		 * <code>repeated string used_permissions = 4;</code>
		 */
		@Override
		public com.google.protobuf.ByteString getUsedPermissionsBytes(int index) {
			return usedPermissions_.getByteString(index);
		}

		// repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;
		public static final int COMPONENTS_FIELD_NUMBER = 5;
		private java.util.List<Ic3Data.Application.Component> components_;

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
		 */
		@Override
		public java.util.List<Ic3Data.Application.Component> getComponentsList() {
			return components_;
		}

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
		 */
		@Override
		public java.util.List<? extends Ic3Data.Application.ComponentOrBuilder> getComponentsOrBuilderList() {
			return components_;
		}

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
		 */
		@Override
		public int getComponentsCount() {
			return components_.size();
		}

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
		 */
		@Override
		public Ic3Data.Application.Component getComponents(int index) {
			return components_.get(index);
		}

		/**
		 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
		 */
		@Override
		public Ic3Data.Application.ComponentOrBuilder getComponentsOrBuilder(int index) {
			return components_.get(index);
		}

		// optional int64 analysis_start = 6;
		public static final int ANALYSIS_START_FIELD_NUMBER = 6;
		private long analysisStart_;

		/**
		 * <code>optional int64 analysis_start = 6;</code>
		 */
		@Override
		public boolean hasAnalysisStart() {
			return ((bitField0_ & 0x00000004) == 0x00000004);
		}

		/**
		 * <code>optional int64 analysis_start = 6;</code>
		 */
		@Override
		public long getAnalysisStart() {
			return analysisStart_;
		}

		// optional int64 analysis_end = 7;
		public static final int ANALYSIS_END_FIELD_NUMBER = 7;
		private long analysisEnd_;

		/**
		 * <code>optional int64 analysis_end = 7;</code>
		 */
		@Override
		public boolean hasAnalysisEnd() {
			return ((bitField0_ & 0x00000008) == 0x00000008);
		}

		/**
		 * <code>optional int64 analysis_end = 7;</code>
		 */
		@Override
		public long getAnalysisEnd() {
			return analysisEnd_;
		}

		// optional string sample = 8;
		public static final int SAMPLE_FIELD_NUMBER = 8;
		private java.lang.Object sample_;

		/**
		 * <code>optional string sample = 8;</code>
		 */
		@Override
		public boolean hasSample() {
			return ((bitField0_ & 0x00000010) == 0x00000010);
		}

		/**
		 * <code>optional string sample = 8;</code>
		 */
		@Override
		public java.lang.String getSample() {
			java.lang.Object ref = sample_;
			if (ref instanceof java.lang.String) {
				return (java.lang.String) ref;
			} else {
				com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
				java.lang.String s = bs.toStringUtf8();
				if (bs.isValidUtf8()) {
					sample_ = s;
				}
				return s;
			}
		}

		/**
		 * <code>optional string sample = 8;</code>
		 */
		@Override
		public com.google.protobuf.ByteString getSampleBytes() {
			java.lang.Object ref = sample_;
			if (ref instanceof java.lang.String) {
				com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
				sample_ = b;
				return b;
			} else {
				return (com.google.protobuf.ByteString) ref;
			}
		}

		private void initFields() {
			name_ = "";
			version_ = 0;
			permissions_ = java.util.Collections.emptyList();
			usedPermissions_ = com.google.protobuf.LazyStringArrayList.EMPTY;
			components_ = java.util.Collections.emptyList();
			analysisStart_ = 0L;
			analysisEnd_ = 0L;
			sample_ = "";
		}

		private byte memoizedIsInitialized = -1;

		@Override
		public final boolean isInitialized() {
			byte isInitialized = memoizedIsInitialized;
			if (isInitialized != -1)
				return isInitialized == 1;

			memoizedIsInitialized = 1;
			return true;
		}

		@Override
		public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
			getSerializedSize();
			if (((bitField0_ & 0x00000001) == 0x00000001)) {
				output.writeBytes(1, getNameBytes());
			}
			if (((bitField0_ & 0x00000002) == 0x00000002)) {
				output.writeUInt32(2, version_);
			}
			for (int i = 0; i < permissions_.size(); i++) {
				output.writeMessage(3, permissions_.get(i));
			}
			for (int i = 0; i < usedPermissions_.size(); i++) {
				output.writeBytes(4, usedPermissions_.getByteString(i));
			}
			for (int i = 0; i < components_.size(); i++) {
				output.writeMessage(5, components_.get(i));
			}
			if (((bitField0_ & 0x00000004) == 0x00000004)) {
				output.writeInt64(6, analysisStart_);
			}
			if (((bitField0_ & 0x00000008) == 0x00000008)) {
				output.writeInt64(7, analysisEnd_);
			}
			if (((bitField0_ & 0x00000010) == 0x00000010)) {
				output.writeBytes(8, getSampleBytes());
			}
			getUnknownFields().writeTo(output);
		}

		private int memoizedSerializedSize = -1;

		@Override
		public int getSerializedSize() {
			int size = memoizedSerializedSize;
			if (size != -1)
				return size;

			size = 0;
			if (((bitField0_ & 0x00000001) == 0x00000001)) {
				size += com.google.protobuf.CodedOutputStream.computeBytesSize(1, getNameBytes());
			}
			if (((bitField0_ & 0x00000002) == 0x00000002)) {
				size += com.google.protobuf.CodedOutputStream.computeUInt32Size(2, version_);
			}
			for (int i = 0; i < permissions_.size(); i++) {
				size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, permissions_.get(i));
			}
			{
				int dataSize = 0;
				for (int i = 0; i < usedPermissions_.size(); i++) {
					dataSize += com.google.protobuf.CodedOutputStream
							.computeBytesSizeNoTag(usedPermissions_.getByteString(i));
				}
				size += dataSize;
				size += 1 * getUsedPermissionsList().size();
			}
			for (int i = 0; i < components_.size(); i++) {
				size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, components_.get(i));
			}
			if (((bitField0_ & 0x00000004) == 0x00000004)) {
				size += com.google.protobuf.CodedOutputStream.computeInt64Size(6, analysisStart_);
			}
			if (((bitField0_ & 0x00000008) == 0x00000008)) {
				size += com.google.protobuf.CodedOutputStream.computeInt64Size(7, analysisEnd_);
			}
			if (((bitField0_ & 0x00000010) == 0x00000010)) {
				size += com.google.protobuf.CodedOutputStream.computeBytesSize(8, getSampleBytes());
			}
			size += getUnknownFields().getSerializedSize();
			memoizedSerializedSize = size;
			return size;
		}

		private static final long serialVersionUID = 0L;

		@java.lang.Override
		protected java.lang.Object writeReplace() throws java.io.ObjectStreamException {
			return super.writeReplace();
		}

		public static Ic3Data.Application parseFrom(com.google.protobuf.ByteString data)
				throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static Ic3Data.Application parseFrom(com.google.protobuf.ByteString data,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry)
				throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static Ic3Data.Application parseFrom(byte[] data)
				throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static Ic3Data.Application parseFrom(byte[] data,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry)
				throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static Ic3Data.Application parseFrom(java.io.InputStream input) throws java.io.IOException {
			return PARSER.parseFrom(input);
		}

		public static Ic3Data.Application parseFrom(java.io.InputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
			return PARSER.parseFrom(input, extensionRegistry);
		}

		public static Ic3Data.Application parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
			return PARSER.parseDelimitedFrom(input);
		}

		public static Ic3Data.Application parseDelimitedFrom(java.io.InputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
			return PARSER.parseDelimitedFrom(input, extensionRegistry);
		}

		public static Ic3Data.Application parseFrom(com.google.protobuf.CodedInputStream input)
				throws java.io.IOException {
			return PARSER.parseFrom(input);
		}

		public static Ic3Data.Application parseFrom(com.google.protobuf.CodedInputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
			return PARSER.parseFrom(input, extensionRegistry);
		}

		public static Builder newBuilder() {
			return Builder.create();
		}

		@Override
		public Builder newBuilderForType() {
			return newBuilder();
		}

		public static Builder newBuilder(Ic3Data.Application prototype) {
			return newBuilder().mergeFrom(prototype);
		}

		@Override
		public Builder toBuilder() {
			return newBuilder(this);
		}

		@java.lang.Override
		protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
			Builder builder = new Builder(parent);
			return builder;
		}

		/**
		 * Protobuf type {@code edu.psu.cse.siis.ic3.Application}
		 */
		public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder>
				implements Ic3Data.ApplicationOrBuilder {
			public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
				return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_descriptor;
			}

			@Override
			protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
				return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_fieldAccessorTable
						.ensureFieldAccessorsInitialized(Ic3Data.Application.class, Ic3Data.Application.Builder.class);
			}

			// Construct using Ic3Data.Application.newBuilder()
			private Builder() {
				maybeForceBuilderInitialization();
			}

			private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
				super(parent);
				maybeForceBuilderInitialization();
			}

			private void maybeForceBuilderInitialization() {
				if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
					getPermissionsFieldBuilder();
					getComponentsFieldBuilder();
				}
			}

			private static Builder create() {
				return new Builder();
			}

			@Override
			public Builder clear() {
				super.clear();
				name_ = "";
				bitField0_ = (bitField0_ & ~0x00000001);
				version_ = 0;
				bitField0_ = (bitField0_ & ~0x00000002);
				if (permissionsBuilder_ == null) {
					permissions_ = java.util.Collections.emptyList();
					bitField0_ = (bitField0_ & ~0x00000004);
				} else {
					permissionsBuilder_.clear();
				}
				usedPermissions_ = com.google.protobuf.LazyStringArrayList.EMPTY;
				bitField0_ = (bitField0_ & ~0x00000008);
				if (componentsBuilder_ == null) {
					components_ = java.util.Collections.emptyList();
					bitField0_ = (bitField0_ & ~0x00000010);
				} else {
					componentsBuilder_.clear();
				}
				analysisStart_ = 0L;
				bitField0_ = (bitField0_ & ~0x00000020);
				analysisEnd_ = 0L;
				bitField0_ = (bitField0_ & ~0x00000040);
				sample_ = "";
				bitField0_ = (bitField0_ & ~0x00000080);
				return this;
			}

			@Override
			public Builder clone() {
				return create().mergeFrom(buildPartial());
			}

			@Override
			public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
				return Ic3Data.internal_static_edu_psu_cse_siis_ic3_Application_descriptor;
			}

			@Override
			public Ic3Data.Application getDefaultInstanceForType() {
				return Ic3Data.Application.getDefaultInstance();
			}

			@Override
			public Ic3Data.Application build() {
				Ic3Data.Application result = buildPartial();
				if (!result.isInitialized()) {
					throw newUninitializedMessageException(result);
				}
				return result;
			}

			@Override
			public Ic3Data.Application buildPartial() {
				Ic3Data.Application result = new Ic3Data.Application(this);
				int from_bitField0_ = bitField0_;
				int to_bitField0_ = 0;
				if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
					to_bitField0_ |= 0x00000001;
				}
				result.name_ = name_;
				if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
					to_bitField0_ |= 0x00000002;
				}
				result.version_ = version_;
				if (permissionsBuilder_ == null) {
					if (((bitField0_ & 0x00000004) == 0x00000004)) {
						permissions_ = java.util.Collections.unmodifiableList(permissions_);
						bitField0_ = (bitField0_ & ~0x00000004);
					}
					result.permissions_ = permissions_;
				} else {
					result.permissions_ = permissionsBuilder_.build();
				}
				if (((bitField0_ & 0x00000008) == 0x00000008)) {
					usedPermissions_ = new com.google.protobuf.UnmodifiableLazyStringList(usedPermissions_);
					bitField0_ = (bitField0_ & ~0x00000008);
				}
				result.usedPermissions_ = usedPermissions_;
				if (componentsBuilder_ == null) {
					if (((bitField0_ & 0x00000010) == 0x00000010)) {
						components_ = java.util.Collections.unmodifiableList(components_);
						bitField0_ = (bitField0_ & ~0x00000010);
					}
					result.components_ = components_;
				} else {
					result.components_ = componentsBuilder_.build();
				}
				if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
					to_bitField0_ |= 0x00000004;
				}
				result.analysisStart_ = analysisStart_;
				if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
					to_bitField0_ |= 0x00000008;
				}
				result.analysisEnd_ = analysisEnd_;
				if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
					to_bitField0_ |= 0x00000010;
				}
				result.sample_ = sample_;
				result.bitField0_ = to_bitField0_;
				onBuilt();
				return result;
			}

			@Override
			public Builder mergeFrom(com.google.protobuf.Message other) {
				if (other instanceof Ic3Data.Application) {
					return mergeFrom((Ic3Data.Application) other);
				} else {
					super.mergeFrom(other);
					return this;
				}
			}

			public Builder mergeFrom(Ic3Data.Application other) {
				if (other == Ic3Data.Application.getDefaultInstance())
					return this;
				if (other.hasName()) {
					bitField0_ |= 0x00000001;
					name_ = other.name_;
					onChanged();
				}
				if (other.hasVersion()) {
					setVersion(other.getVersion());
				}
				if (permissionsBuilder_ == null) {
					if (!other.permissions_.isEmpty()) {
						if (permissions_.isEmpty()) {
							permissions_ = other.permissions_;
							bitField0_ = (bitField0_ & ~0x00000004);
						} else {
							ensurePermissionsIsMutable();
							permissions_.addAll(other.permissions_);
						}
						onChanged();
					}
				} else {
					if (!other.permissions_.isEmpty()) {
						if (permissionsBuilder_.isEmpty()) {
							permissionsBuilder_.dispose();
							permissionsBuilder_ = null;
							permissions_ = other.permissions_;
							bitField0_ = (bitField0_ & ~0x00000004);
							permissionsBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders
									? getPermissionsFieldBuilder()
									: null;
						} else {
							permissionsBuilder_.addAllMessages(other.permissions_);
						}
					}
				}
				if (!other.usedPermissions_.isEmpty()) {
					if (usedPermissions_.isEmpty()) {
						usedPermissions_ = other.usedPermissions_;
						bitField0_ = (bitField0_ & ~0x00000008);
					} else {
						ensureUsedPermissionsIsMutable();
						usedPermissions_.addAll(other.usedPermissions_);
					}
					onChanged();
				}
				if (componentsBuilder_ == null) {
					if (!other.components_.isEmpty()) {
						if (components_.isEmpty()) {
							components_ = other.components_;
							bitField0_ = (bitField0_ & ~0x00000010);
						} else {
							ensureComponentsIsMutable();
							components_.addAll(other.components_);
						}
						onChanged();
					}
				} else {
					if (!other.components_.isEmpty()) {
						if (componentsBuilder_.isEmpty()) {
							componentsBuilder_.dispose();
							componentsBuilder_ = null;
							components_ = other.components_;
							bitField0_ = (bitField0_ & ~0x00000010);
							componentsBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders
									? getComponentsFieldBuilder()
									: null;
						} else {
							componentsBuilder_.addAllMessages(other.components_);
						}
					}
				}
				if (other.hasAnalysisStart()) {
					setAnalysisStart(other.getAnalysisStart());
				}
				if (other.hasAnalysisEnd()) {
					setAnalysisEnd(other.getAnalysisEnd());
				}
				if (other.hasSample()) {
					bitField0_ |= 0x00000080;
					sample_ = other.sample_;
					onChanged();
				}
				this.mergeUnknownFields(other.getUnknownFields());
				return this;
			}

			@Override
			public final boolean isInitialized() {
				return true;
			}

			@Override
			public Builder mergeFrom(com.google.protobuf.CodedInputStream input,
					com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
				Ic3Data.Application parsedMessage = null;
				try {
					parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
				} catch (com.google.protobuf.InvalidProtocolBufferException e) {
					parsedMessage = (Ic3Data.Application) e.getUnfinishedMessage();
					throw e;
				} finally {
					if (parsedMessage != null) {
						mergeFrom(parsedMessage);
					}
				}
				return this;
			}

			private int bitField0_;

			// optional string name = 1;
			private java.lang.Object name_ = "";

			/**
			 * <code>optional string name = 1;</code>
			 */
			@Override
			public boolean hasName() {
				return ((bitField0_ & 0x00000001) == 0x00000001);
			}

			/**
			 * <code>optional string name = 1;</code>
			 */
			@Override
			public java.lang.String getName() {
				java.lang.Object ref = name_;
				if (!(ref instanceof java.lang.String)) {
					java.lang.String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
					name_ = s;
					return s;
				} else {
					return (java.lang.String) ref;
				}
			}

			/**
			 * <code>optional string name = 1;</code>
			 */
			@Override
			public com.google.protobuf.ByteString getNameBytes() {
				java.lang.Object ref = name_;
				if (ref instanceof String) {
					com.google.protobuf.ByteString b = com.google.protobuf.ByteString
							.copyFromUtf8((java.lang.String) ref);
					name_ = b;
					return b;
				} else {
					return (com.google.protobuf.ByteString) ref;
				}
			}

			/**
			 * <code>optional string name = 1;</code>
			 */
			public Builder setName(java.lang.String value) {
				if (value == null) {
					throw new NullPointerException();
				}
				bitField0_ |= 0x00000001;
				name_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>optional string name = 1;</code>
			 */
			public Builder clearName() {
				bitField0_ = (bitField0_ & ~0x00000001);
				name_ = getDefaultInstance().getName();
				onChanged();
				return this;
			}

			/**
			 * <code>optional string name = 1;</code>
			 */
			public Builder setNameBytes(com.google.protobuf.ByteString value) {
				if (value == null) {
					throw new NullPointerException();
				}
				bitField0_ |= 0x00000001;
				name_ = value;
				onChanged();
				return this;
			}

			// optional uint32 version = 2;
			private int version_;

			/**
			 * <code>optional uint32 version = 2;</code>
			 */
			@Override
			public boolean hasVersion() {
				return ((bitField0_ & 0x00000002) == 0x00000002);
			}

			/**
			 * <code>optional uint32 version = 2;</code>
			 */
			@Override
			public int getVersion() {
				return version_;
			}

			/**
			 * <code>optional uint32 version = 2;</code>
			 */
			public Builder setVersion(int value) {
				bitField0_ |= 0x00000002;
				version_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>optional uint32 version = 2;</code>
			 */
			public Builder clearVersion() {
				bitField0_ = (bitField0_ & ~0x00000002);
				version_ = 0;
				onChanged();
				return this;
			}

			// repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;
			private java.util.List<Ic3Data.Application.Permission> permissions_ = java.util.Collections.emptyList();

			private void ensurePermissionsIsMutable() {
				if (!((bitField0_ & 0x00000004) == 0x00000004)) {
					permissions_ = new java.util.ArrayList<Ic3Data.Application.Permission>(permissions_);
					bitField0_ |= 0x00000004;
				}
			}

			private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Permission, Ic3Data.Application.Permission.Builder, Ic3Data.Application.PermissionOrBuilder> permissionsBuilder_;

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			@Override
			public java.util.List<Ic3Data.Application.Permission> getPermissionsList() {
				if (permissionsBuilder_ == null) {
					return java.util.Collections.unmodifiableList(permissions_);
				} else {
					return permissionsBuilder_.getMessageList();
				}
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			@Override
			public int getPermissionsCount() {
				if (permissionsBuilder_ == null) {
					return permissions_.size();
				} else {
					return permissionsBuilder_.getCount();
				}
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			@Override
			public Ic3Data.Application.Permission getPermissions(int index) {
				if (permissionsBuilder_ == null) {
					return permissions_.get(index);
				} else {
					return permissionsBuilder_.getMessage(index);
				}
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			public Builder setPermissions(int index, Ic3Data.Application.Permission value) {
				if (permissionsBuilder_ == null) {
					if (value == null) {
						throw new NullPointerException();
					}
					ensurePermissionsIsMutable();
					permissions_.set(index, value);
					onChanged();
				} else {
					permissionsBuilder_.setMessage(index, value);
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			public Builder setPermissions(int index, Ic3Data.Application.Permission.Builder builderForValue) {
				if (permissionsBuilder_ == null) {
					ensurePermissionsIsMutable();
					permissions_.set(index, builderForValue.build());
					onChanged();
				} else {
					permissionsBuilder_.setMessage(index, builderForValue.build());
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			public Builder addPermissions(Ic3Data.Application.Permission value) {
				if (permissionsBuilder_ == null) {
					if (value == null) {
						throw new NullPointerException();
					}
					ensurePermissionsIsMutable();
					permissions_.add(value);
					onChanged();
				} else {
					permissionsBuilder_.addMessage(value);
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			public Builder addPermissions(int index, Ic3Data.Application.Permission value) {
				if (permissionsBuilder_ == null) {
					if (value == null) {
						throw new NullPointerException();
					}
					ensurePermissionsIsMutable();
					permissions_.add(index, value);
					onChanged();
				} else {
					permissionsBuilder_.addMessage(index, value);
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			public Builder addPermissions(Ic3Data.Application.Permission.Builder builderForValue) {
				if (permissionsBuilder_ == null) {
					ensurePermissionsIsMutable();
					permissions_.add(builderForValue.build());
					onChanged();
				} else {
					permissionsBuilder_.addMessage(builderForValue.build());
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			public Builder addPermissions(int index, Ic3Data.Application.Permission.Builder builderForValue) {
				if (permissionsBuilder_ == null) {
					ensurePermissionsIsMutable();
					permissions_.add(index, builderForValue.build());
					onChanged();
				} else {
					permissionsBuilder_.addMessage(index, builderForValue.build());
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			public Builder addAllPermissions(java.lang.Iterable<? extends Ic3Data.Application.Permission> values) {
				if (permissionsBuilder_ == null) {
					ensurePermissionsIsMutable();
					super.addAll(values, permissions_);
					onChanged();
				} else {
					permissionsBuilder_.addAllMessages(values);
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			public Builder clearPermissions() {
				if (permissionsBuilder_ == null) {
					permissions_ = java.util.Collections.emptyList();
					bitField0_ = (bitField0_ & ~0x00000004);
					onChanged();
				} else {
					permissionsBuilder_.clear();
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			public Builder removePermissions(int index) {
				if (permissionsBuilder_ == null) {
					ensurePermissionsIsMutable();
					permissions_.remove(index);
					onChanged();
				} else {
					permissionsBuilder_.remove(index);
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			public Ic3Data.Application.Permission.Builder getPermissionsBuilder(int index) {
				return getPermissionsFieldBuilder().getBuilder(index);
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			@Override
			public Ic3Data.Application.PermissionOrBuilder getPermissionsOrBuilder(int index) {
				if (permissionsBuilder_ == null) {
					return permissions_.get(index);
				} else {
					return permissionsBuilder_.getMessageOrBuilder(index);
				}
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			@Override
			public java.util.List<? extends Ic3Data.Application.PermissionOrBuilder> getPermissionsOrBuilderList() {
				if (permissionsBuilder_ != null) {
					return permissionsBuilder_.getMessageOrBuilderList();
				} else {
					return java.util.Collections.unmodifiableList(permissions_);
				}
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			public Ic3Data.Application.Permission.Builder addPermissionsBuilder() {
				return getPermissionsFieldBuilder().addBuilder(Ic3Data.Application.Permission.getDefaultInstance());
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			public Ic3Data.Application.Permission.Builder addPermissionsBuilder(int index) {
				return getPermissionsFieldBuilder().addBuilder(index,
						Ic3Data.Application.Permission.getDefaultInstance());
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Permission permissions = 3;</code>
			 */
			public java.util.List<Ic3Data.Application.Permission.Builder> getPermissionsBuilderList() {
				return getPermissionsFieldBuilder().getBuilderList();
			}

			private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Permission, Ic3Data.Application.Permission.Builder, Ic3Data.Application.PermissionOrBuilder> getPermissionsFieldBuilder() {
				if (permissionsBuilder_ == null) {
					permissionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Permission, Ic3Data.Application.Permission.Builder, Ic3Data.Application.PermissionOrBuilder>(
							permissions_, ((bitField0_ & 0x00000004) == 0x00000004), getParentForChildren(), isClean());
					permissions_ = null;
				}
				return permissionsBuilder_;
			}

			// repeated string used_permissions = 4;
			private com.google.protobuf.LazyStringList usedPermissions_ = com.google.protobuf.LazyStringArrayList.EMPTY;

			private void ensureUsedPermissionsIsMutable() {
				if (!((bitField0_ & 0x00000008) == 0x00000008)) {
					usedPermissions_ = new com.google.protobuf.LazyStringArrayList(usedPermissions_);
					bitField0_ |= 0x00000008;
				}
			}

			/**
			 * <code>repeated string used_permissions = 4;</code>
			 */
			@Override
			public java.util.List<java.lang.String> getUsedPermissionsList() {
				return java.util.Collections.unmodifiableList(usedPermissions_);
			}

			/**
			 * <code>repeated string used_permissions = 4;</code>
			 */
			@Override
			public int getUsedPermissionsCount() {
				return usedPermissions_.size();
			}

			/**
			 * <code>repeated string used_permissions = 4;</code>
			 */
			@Override
			public java.lang.String getUsedPermissions(int index) {
				return usedPermissions_.get(index);
			}

			/**
			 * <code>repeated string used_permissions = 4;</code>
			 */
			@Override
			public com.google.protobuf.ByteString getUsedPermissionsBytes(int index) {
				return usedPermissions_.getByteString(index);
			}

			/**
			 * <code>repeated string used_permissions = 4;</code>
			 */
			public Builder setUsedPermissions(int index, java.lang.String value) {
				if (value == null) {
					throw new NullPointerException();
				}
				ensureUsedPermissionsIsMutable();
				usedPermissions_.set(index, value);
				onChanged();
				return this;
			}

			/**
			 * <code>repeated string used_permissions = 4;</code>
			 */
			public Builder addUsedPermissions(java.lang.String value) {
				if (value == null) {
					throw new NullPointerException();
				}
				ensureUsedPermissionsIsMutable();
				usedPermissions_.add(value);
				onChanged();
				return this;
			}

			/**
			 * <code>repeated string used_permissions = 4;</code>
			 */
			public Builder addAllUsedPermissions(java.lang.Iterable<java.lang.String> values) {
				ensureUsedPermissionsIsMutable();
				super.addAll(values, usedPermissions_);
				onChanged();
				return this;
			}

			/**
			 * <code>repeated string used_permissions = 4;</code>
			 */
			public Builder clearUsedPermissions() {
				usedPermissions_ = com.google.protobuf.LazyStringArrayList.EMPTY;
				bitField0_ = (bitField0_ & ~0x00000008);
				onChanged();
				return this;
			}

			/**
			 * <code>repeated string used_permissions = 4;</code>
			 */
			public Builder addUsedPermissionsBytes(com.google.protobuf.ByteString value) {
				if (value == null) {
					throw new NullPointerException();
				}
				ensureUsedPermissionsIsMutable();
				usedPermissions_.add(value);
				onChanged();
				return this;
			}

			// repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;
			private java.util.List<Ic3Data.Application.Component> components_ = java.util.Collections.emptyList();

			private void ensureComponentsIsMutable() {
				if (!((bitField0_ & 0x00000010) == 0x00000010)) {
					components_ = new java.util.ArrayList<Ic3Data.Application.Component>(components_);
					bitField0_ |= 0x00000010;
				}
			}

			private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component, Ic3Data.Application.Component.Builder, Ic3Data.Application.ComponentOrBuilder> componentsBuilder_;

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			@Override
			public java.util.List<Ic3Data.Application.Component> getComponentsList() {
				if (componentsBuilder_ == null) {
					return java.util.Collections.unmodifiableList(components_);
				} else {
					return componentsBuilder_.getMessageList();
				}
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			@Override
			public int getComponentsCount() {
				if (componentsBuilder_ == null) {
					return components_.size();
				} else {
					return componentsBuilder_.getCount();
				}
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			@Override
			public Ic3Data.Application.Component getComponents(int index) {
				if (componentsBuilder_ == null) {
					return components_.get(index);
				} else {
					return componentsBuilder_.getMessage(index);
				}
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			public Builder setComponents(int index, Ic3Data.Application.Component value) {
				if (componentsBuilder_ == null) {
					if (value == null) {
						throw new NullPointerException();
					}
					ensureComponentsIsMutable();
					components_.set(index, value);
					onChanged();
				} else {
					componentsBuilder_.setMessage(index, value);
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			public Builder setComponents(int index, Ic3Data.Application.Component.Builder builderForValue) {
				if (componentsBuilder_ == null) {
					ensureComponentsIsMutable();
					components_.set(index, builderForValue.build());
					onChanged();
				} else {
					componentsBuilder_.setMessage(index, builderForValue.build());
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			public Builder addComponents(Ic3Data.Application.Component value) {
				if (componentsBuilder_ == null) {
					if (value == null) {
						throw new NullPointerException();
					}
					ensureComponentsIsMutable();
					components_.add(value);
					onChanged();
				} else {
					componentsBuilder_.addMessage(value);
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			public Builder addComponents(int index, Ic3Data.Application.Component value) {
				if (componentsBuilder_ == null) {
					if (value == null) {
						throw new NullPointerException();
					}
					ensureComponentsIsMutable();
					components_.add(index, value);
					onChanged();
				} else {
					componentsBuilder_.addMessage(index, value);
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			public Builder addComponents(Ic3Data.Application.Component.Builder builderForValue) {
				if (componentsBuilder_ == null) {
					ensureComponentsIsMutable();
					components_.add(builderForValue.build());
					onChanged();
				} else {
					componentsBuilder_.addMessage(builderForValue.build());
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			public Builder addComponents(int index, Ic3Data.Application.Component.Builder builderForValue) {
				if (componentsBuilder_ == null) {
					ensureComponentsIsMutable();
					components_.add(index, builderForValue.build());
					onChanged();
				} else {
					componentsBuilder_.addMessage(index, builderForValue.build());
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			public Builder addAllComponents(java.lang.Iterable<? extends Ic3Data.Application.Component> values) {
				if (componentsBuilder_ == null) {
					ensureComponentsIsMutable();
					super.addAll(values, components_);
					onChanged();
				} else {
					componentsBuilder_.addAllMessages(values);
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			public Builder clearComponents() {
				if (componentsBuilder_ == null) {
					components_ = java.util.Collections.emptyList();
					bitField0_ = (bitField0_ & ~0x00000010);
					onChanged();
				} else {
					componentsBuilder_.clear();
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			public Builder removeComponents(int index) {
				if (componentsBuilder_ == null) {
					ensureComponentsIsMutable();
					components_.remove(index);
					onChanged();
				} else {
					componentsBuilder_.remove(index);
				}
				return this;
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			public Ic3Data.Application.Component.Builder getComponentsBuilder(int index) {
				return getComponentsFieldBuilder().getBuilder(index);
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			@Override
			public Ic3Data.Application.ComponentOrBuilder getComponentsOrBuilder(int index) {
				if (componentsBuilder_ == null) {
					return components_.get(index);
				} else {
					return componentsBuilder_.getMessageOrBuilder(index);
				}
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			@Override
			public java.util.List<? extends Ic3Data.Application.ComponentOrBuilder> getComponentsOrBuilderList() {
				if (componentsBuilder_ != null) {
					return componentsBuilder_.getMessageOrBuilderList();
				} else {
					return java.util.Collections.unmodifiableList(components_);
				}
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			public Ic3Data.Application.Component.Builder addComponentsBuilder() {
				return getComponentsFieldBuilder().addBuilder(Ic3Data.Application.Component.getDefaultInstance());
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			public Ic3Data.Application.Component.Builder addComponentsBuilder(int index) {
				return getComponentsFieldBuilder().addBuilder(index,
						Ic3Data.Application.Component.getDefaultInstance());
			}

			/**
			 * <code>repeated .edu.psu.cse.siis.ic3.Application.Component components = 5;</code>
			 */
			public java.util.List<Ic3Data.Application.Component.Builder> getComponentsBuilderList() {
				return getComponentsFieldBuilder().getBuilderList();
			}

			private com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component, Ic3Data.Application.Component.Builder, Ic3Data.Application.ComponentOrBuilder> getComponentsFieldBuilder() {
				if (componentsBuilder_ == null) {
					componentsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<Ic3Data.Application.Component, Ic3Data.Application.Component.Builder, Ic3Data.Application.ComponentOrBuilder>(
							components_, ((bitField0_ & 0x00000010) == 0x00000010), getParentForChildren(), isClean());
					components_ = null;
				}
				return componentsBuilder_;
			}

			// optional int64 analysis_start = 6;
			private long analysisStart_;

			/**
			 * <code>optional int64 analysis_start = 6;</code>
			 */
			@Override
			public boolean hasAnalysisStart() {
				return ((bitField0_ & 0x00000020) == 0x00000020);
			}

			/**
			 * <code>optional int64 analysis_start = 6;</code>
			 */
			@Override
			public long getAnalysisStart() {
				return analysisStart_;
			}

			/**
			 * <code>optional int64 analysis_start = 6;</code>
			 */
			public Builder setAnalysisStart(long value) {
				bitField0_ |= 0x00000020;
				analysisStart_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>optional int64 analysis_start = 6;</code>
			 */
			public Builder clearAnalysisStart() {
				bitField0_ = (bitField0_ & ~0x00000020);
				analysisStart_ = 0L;
				onChanged();
				return this;
			}

			// optional int64 analysis_end = 7;
			private long analysisEnd_;

			/**
			 * <code>optional int64 analysis_end = 7;</code>
			 */
			@Override
			public boolean hasAnalysisEnd() {
				return ((bitField0_ & 0x00000040) == 0x00000040);
			}

			/**
			 * <code>optional int64 analysis_end = 7;</code>
			 */
			@Override
			public long getAnalysisEnd() {
				return analysisEnd_;
			}

			/**
			 * <code>optional int64 analysis_end = 7;</code>
			 */
			public Builder setAnalysisEnd(long value) {
				bitField0_ |= 0x00000040;
				analysisEnd_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>optional int64 analysis_end = 7;</code>
			 */
			public Builder clearAnalysisEnd() {
				bitField0_ = (bitField0_ & ~0x00000040);
				analysisEnd_ = 0L;
				onChanged();
				return this;
			}

			// optional string sample = 8;
			private java.lang.Object sample_ = "";

			/**
			 * <code>optional string sample = 8;</code>
			 */
			@Override
			public boolean hasSample() {
				return ((bitField0_ & 0x00000080) == 0x00000080);
			}

			/**
			 * <code>optional string sample = 8;</code>
			 */
			@Override
			public java.lang.String getSample() {
				java.lang.Object ref = sample_;
				if (!(ref instanceof java.lang.String)) {
					java.lang.String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
					sample_ = s;
					return s;
				} else {
					return (java.lang.String) ref;
				}
			}

			/**
			 * <code>optional string sample = 8;</code>
			 */
			@Override
			public com.google.protobuf.ByteString getSampleBytes() {
				java.lang.Object ref = sample_;
				if (ref instanceof String) {
					com.google.protobuf.ByteString b = com.google.protobuf.ByteString
							.copyFromUtf8((java.lang.String) ref);
					sample_ = b;
					return b;
				} else {
					return (com.google.protobuf.ByteString) ref;
				}
			}

			/**
			 * <code>optional string sample = 8;</code>
			 */
			public Builder setSample(java.lang.String value) {
				if (value == null) {
					throw new NullPointerException();
				}
				bitField0_ |= 0x00000080;
				sample_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>optional string sample = 8;</code>
			 */
			public Builder clearSample() {
				bitField0_ = (bitField0_ & ~0x00000080);
				sample_ = getDefaultInstance().getSample();
				onChanged();
				return this;
			}

			/**
			 * <code>optional string sample = 8;</code>
			 */
			public Builder setSampleBytes(com.google.protobuf.ByteString value) {
				if (value == null) {
					throw new NullPointerException();
				}
				bitField0_ |= 0x00000080;
				sample_ = value;
				onChanged();
				return this;
			}

			// @@protoc_insertion_point(builder_scope:edu.psu.cse.siis.ic3.Application)
		}

		static {
			defaultInstance = new Application(true);
			defaultInstance.initFields();
		}

		// @@protoc_insertion_point(class_scope:edu.psu.cse.siis.ic3.Application)
	}

	private static com.google.protobuf.Descriptors.Descriptor internal_static_edu_psu_cse_siis_ic3_Attribute_descriptor;
	private static com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_edu_psu_cse_siis_ic3_Attribute_fieldAccessorTable;
	private static com.google.protobuf.Descriptors.Descriptor internal_static_edu_psu_cse_siis_ic3_Application_descriptor;
	private static com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_edu_psu_cse_siis_ic3_Application_fieldAccessorTable;
	private static com.google.protobuf.Descriptors.Descriptor internal_static_edu_psu_cse_siis_ic3_Application_Permission_descriptor;
	private static com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_edu_psu_cse_siis_ic3_Application_Permission_fieldAccessorTable;
	private static com.google.protobuf.Descriptors.Descriptor internal_static_edu_psu_cse_siis_ic3_Application_Component_descriptor;
	private static com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_edu_psu_cse_siis_ic3_Application_Component_fieldAccessorTable;
	private static com.google.protobuf.Descriptors.Descriptor internal_static_edu_psu_cse_siis_ic3_Application_Component_Extra_descriptor;
	private static com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_edu_psu_cse_siis_ic3_Application_Component_Extra_fieldAccessorTable;
	private static com.google.protobuf.Descriptors.Descriptor internal_static_edu_psu_cse_siis_ic3_Application_Component_IntentFilter_descriptor;
	private static com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_edu_psu_cse_siis_ic3_Application_Component_IntentFilter_fieldAccessorTable;
	private static com.google.protobuf.Descriptors.Descriptor internal_static_edu_psu_cse_siis_ic3_Application_Component_Instruction_descriptor;
	private static com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_edu_psu_cse_siis_ic3_Application_Component_Instruction_fieldAccessorTable;
	private static com.google.protobuf.Descriptors.Descriptor internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_descriptor;
	private static com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_fieldAccessorTable;
	private static com.google.protobuf.Descriptors.Descriptor internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Intent_descriptor;
	private static com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Intent_fieldAccessorTable;
	private static com.google.protobuf.Descriptors.Descriptor internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Uri_descriptor;
	private static com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Uri_fieldAccessorTable;

	public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
		return descriptor;
	}

	private static com.google.protobuf.Descriptors.FileDescriptor descriptor;
	static {
		java.lang.String[] descriptorData = {
				"\n\027protobuf/ic3_data.proto\022\024edu.psu.cse.s"
						+ "iis.ic3\"`\n\tAttribute\0221\n\004kind\030\001 \001(\0162#.edu"
						+ ".psu.cse.siis.ic3.AttributeKind\022\r\n\005value"
						+ "\030\002 \003(\t\022\021\n\tint_value\030\003 \003(\005\"\301\016\n\013Applicatio"
						+ "n\022\014\n\004name\030\001 \001(\t\022\017\n\007version\030\002 \001(\r\022A\n\013perm"
						+ "issions\030\003 \003(\0132,.edu.psu.cse.siis.ic3.App"
						+ "lication.Permission\022\030\n\020used_permissions\030"
						+ "\004 \003(\t\022?\n\ncomponents\030\005 \003(\0132+.edu.psu.cse."
						+ "siis.ic3.Application.Component\022\026\n\016analys"
						+ "is_start\030\006 \001(\003\022\024\n\014analysis_end\030\007 \001(\003\022\016\n\006",
				"sample\030\010 \001(\t\032\251\001\n\nPermission\022\014\n\004name\030\001 \001("
						+ "\t\022A\n\005level\030\002 \001(\01622.edu.psu.cse.siis.ic3."
						+ "Application.Permission.Level\"J\n\005Level\022\n\n"
						+ "\006NORMAL\020\000\022\r\n\tDANGEROUS\020\001\022\r\n\tSIGNATURE\020\002\022"
						+ "\027\n\023SIGNATURE_OR_SYSTEM\020\003\032\212\013\n\tComponent\022\014"
						+ "\n\004name\030\001 \001(\t\022G\n\004kind\030\002 \001(\01629.edu.psu.cse"
						+ ".siis.ic3.Application.Component.Componen"
						+ "tKind\022\020\n\010exported\030\003 \001(\010\022\022\n\npermission\030\004 "
						+ "\001(\t\022\017\n\007missing\030\005 \001(\r\022A\n\006extras\030\006 \003(\01321.e"
						+ "du.psu.cse.siis.ic3.Application.Componen",
				"t.Extra\022\024\n\014alias_target\030\007 \001(\t\022\035\n\025grant_u"
						+ "ri_permissions\030\010 \001(\010\022\027\n\017read_permission\030"
						+ "\t \001(\t\022\030\n\020write_permission\030\n \001(\t\022\023\n\013autho"
						+ "rities\030\013 \003(\t\022P\n\016intent_filters\030\014 \003(\01328.e"
						+ "du.psu.cse.siis.ic3.Application.Componen"
						+ "t.IntentFilter\022J\n\013exit_points\030\r \003(\01325.ed"
						+ "u.psu.cse.siis.ic3.Application.Component"
						+ ".ExitPoint\022Y\n\030registration_instruction\030\016"
						+ " \001(\01327.edu.psu.cse.siis.ic3.Application."
						+ "Component.Instruction\032d\n\005Extra\022\r\n\005extra\030",
				"\001 \001(\t\022L\n\013instruction\030\002 \001(\01327.edu.psu.cse"
						+ ".siis.ic3.Application.Component.Instruct"
						+ "ion\032C\n\014IntentFilter\0223\n\nattributes\030\001 \003(\0132"
						+ "\037.edu.psu.cse.siis.ic3.Attribute\032P\n\013Inst"
						+ "ruction\022\021\n\tstatement\030\001 \001(\t\022\022\n\nclass_name"
						+ "\030\002 \001(\t\022\016\n\006method\030\003 \001(\t\022\n\n\002id\030\004 \001(\r\032\332\003\n\tE"
						+ "xitPoint\022L\n\013instruction\030\001 \001(\01327.edu.psu."
						+ "cse.siis.ic3.Application.Component.Instr"
						+ "uction\022G\n\004kind\030\002 \001(\01629.edu.psu.cse.siis."
						+ "ic3.Application.Component.ComponentKind\022",
				"\017\n\007missing\030\003 \001(\r\022M\n\007intents\030\004 \003(\0132<.edu."
						+ "psu.cse.siis.ic3.Application.Component.E"
						+ "xitPoint.Intent\022G\n\004uris\030\005 \003(\01329.edu.psu."
						+ "cse.siis.ic3.Application.Component.ExitP"
						+ "oint.Uri\032Q\n\006Intent\0223\n\nattributes\030\001 \003(\0132\037"
						+ ".edu.psu.cse.siis.ic3.Attribute\022\022\n\npermi"
						+ "ssion\030\002 \001(\t\032:\n\003Uri\0223\n\nattributes\030\001 \003(\0132\037"
						+ ".edu.psu.cse.siis.ic3.Attribute\"\\\n\rCompo"
						+ "nentKind\022\014\n\010ACTIVITY\020\000\022\013\n\007SERVICE\020\001\022\014\n\010R"
						+ "ECEIVER\020\002\022\024\n\020DYNAMIC_RECEIVER\020\003\022\014\n\010PROVI",
				"DER\020\004*\304\001\n\rAttributeKind\022\n\n\006ACTION\020\000\022\014\n\010C"
						+ "ATEGORY\020\001\022\013\n\007PACKAGE\020\002\022\t\n\005CLASS\020\003\022\010\n\004TYP"
						+ "E\020\004\022\007\n\003URI\020\005\022\n\n\006SCHEME\020\006\022\t\n\005EXTRA\020\007\022\r\n\tA"
						+ "UTHORITY\020\010\022\010\n\004HOST\020\t\022\010\n\004PATH\020\n\022\010\n\004PORT\020\013"
						+ "\022\007\n\003SSP\020\014\022\t\n\005QUERY\020\r\022\010\n\004FLAG\020\016\022\014\n\010PRIORI"
						+ "TY\020\017" };
		com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
			@Override
			public com.google.protobuf.ExtensionRegistry assignDescriptors(
					com.google.protobuf.Descriptors.FileDescriptor root) {
				descriptor = root;
				internal_static_edu_psu_cse_siis_ic3_Attribute_descriptor = getDescriptor().getMessageTypes().get(0);
				internal_static_edu_psu_cse_siis_ic3_Attribute_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
						internal_static_edu_psu_cse_siis_ic3_Attribute_descriptor,
						new java.lang.String[] { "Kind", "Value", "IntValue", });
				internal_static_edu_psu_cse_siis_ic3_Application_descriptor = getDescriptor().getMessageTypes().get(1);
				internal_static_edu_psu_cse_siis_ic3_Application_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
						internal_static_edu_psu_cse_siis_ic3_Application_descriptor,
						new java.lang.String[] { "Name", "Version", "Permissions", "UsedPermissions", "Components",
								"AnalysisStart", "AnalysisEnd", "Sample", });
				internal_static_edu_psu_cse_siis_ic3_Application_Permission_descriptor = internal_static_edu_psu_cse_siis_ic3_Application_descriptor
						.getNestedTypes().get(0);
				internal_static_edu_psu_cse_siis_ic3_Application_Permission_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
						internal_static_edu_psu_cse_siis_ic3_Application_Permission_descriptor,
						new java.lang.String[] { "Name", "Level", });
				internal_static_edu_psu_cse_siis_ic3_Application_Component_descriptor = internal_static_edu_psu_cse_siis_ic3_Application_descriptor
						.getNestedTypes().get(1);
				internal_static_edu_psu_cse_siis_ic3_Application_Component_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
						internal_static_edu_psu_cse_siis_ic3_Application_Component_descriptor,
						new java.lang.String[] { "Name", "Kind", "Exported", "Permission", "Missing", "Extras",
								"AliasTarget", "GrantUriPermissions", "ReadPermission", "WritePermission",
								"Authorities", "IntentFilters", "ExitPoints", "RegistrationInstruction", });
				internal_static_edu_psu_cse_siis_ic3_Application_Component_Extra_descriptor = internal_static_edu_psu_cse_siis_ic3_Application_Component_descriptor
						.getNestedTypes().get(0);
				internal_static_edu_psu_cse_siis_ic3_Application_Component_Extra_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
						internal_static_edu_psu_cse_siis_ic3_Application_Component_Extra_descriptor,
						new java.lang.String[] { "Extra", "Instruction", });
				internal_static_edu_psu_cse_siis_ic3_Application_Component_IntentFilter_descriptor = internal_static_edu_psu_cse_siis_ic3_Application_Component_descriptor
						.getNestedTypes().get(1);
				internal_static_edu_psu_cse_siis_ic3_Application_Component_IntentFilter_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
						internal_static_edu_psu_cse_siis_ic3_Application_Component_IntentFilter_descriptor,
						new java.lang.String[] { "Attributes", });
				internal_static_edu_psu_cse_siis_ic3_Application_Component_Instruction_descriptor = internal_static_edu_psu_cse_siis_ic3_Application_Component_descriptor
						.getNestedTypes().get(2);
				internal_static_edu_psu_cse_siis_ic3_Application_Component_Instruction_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
						internal_static_edu_psu_cse_siis_ic3_Application_Component_Instruction_descriptor,
						new java.lang.String[] { "Statement", "ClassName", "Method", "Id", });
				internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_descriptor = internal_static_edu_psu_cse_siis_ic3_Application_Component_descriptor
						.getNestedTypes().get(3);
				internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
						internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_descriptor,
						new java.lang.String[] { "Instruction", "Kind", "Missing", "Intents", "Uris", });
				internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Intent_descriptor = internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_descriptor
						.getNestedTypes().get(0);
				internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Intent_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
						internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Intent_descriptor,
						new java.lang.String[] { "Attributes", "Permission", });
				internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Uri_descriptor = internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_descriptor
						.getNestedTypes().get(1);
				internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Uri_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
						internal_static_edu_psu_cse_siis_ic3_Application_Component_ExitPoint_Uri_descriptor,
						new java.lang.String[] { "Attributes", });
				return null;
			}
		};
		com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData,
				new com.google.protobuf.Descriptors.FileDescriptor[] {}, assigner);
	}

	// @@protoc_insertion_point(outer_class_scope)
}
