// Path: src/net/eiveo/utils/SmartByteArrayOutputStream.java
// public class SmartByteArrayOutputStream {
// 	private List<ByteArrayOutputStream> sections = new ArrayList<>();
// 	private ByteArrayOutputStream section;
// 	
// 	public SmartByteArrayOutputStream() {
// 		this.section = new ByteArrayOutputStream();
// 		this.sections.add(this.section);
// 	}
// 
// 	public void sectionStart() {
// 		this.section = new ByteArrayOutputStream();
// 		this.sections.add(this.section);
// 	}
// 	
// 	public byte[] sectionEnd() {
// 		byte[] result = this.section.toByteArray();
// 		sections.remove(sections.size() - 1);
// 		this.section = sections.get(sections.size() - 1);
// 		return result;
// 	}
// 
// 	public byte[] toByteArray() {
// 		return this.section.toByteArray();
// 	}
// 
// 	public void write(String string) {
// 		for (byte byteData : string.getBytes()) {
// 			this.section.write(byteData);
// 		}
// 	}
// 
// 	public void write(byte value) {
// 		this.section.write(value);
// 	}
// 
// 	public void write(byte[] value) {
// 		for (byte byteData : value) {
// 			this.section.write(byteData);
// 		}
// 	}
// 
// 	public void write(short value) {
// 		for (byte byteData : new byte[] {
// 	        (byte) value,
// 	        (byte)(value >> 8)
//         }) {
// 			this.section.write(byteData);
// 		}
// 	}
// 
// 	public void write(int value) {
// 		for (byte byteData : new byte[] {
// 	        (byte) value,
// 	        (byte)(value >> 8),
// 	        (byte)(value >> 16),
// 	        (byte)(value >> 24)
//         }) {
// 			this.section.write(byteData);
// 		}
// 	}
// }
// 
// Path: src/net/eiveo/utils/SmartByteBuffer.java
// public class SmartByteBuffer {
// 	private ByteBuffer byteBuffer;
// 
// 	public int capacity() {
// 		return this.byteBuffer.capacity();
// 	}
// 
// 	public byte get() {
// 		return this.byteBuffer.get();
// 	}
// 
// 	public void get(byte[] dst) {
// 		this.byteBuffer.get(dst);
// 	}
// 
// 	public int getInt() {
// 		return this.byteBuffer.getInt();
// 	}
// 
// 	public short getShort() {
// 		return this.byteBuffer.getShort();
// 	}
// 
// 	public String getString() {
// 		String string = "";
// 		
// 		while (true) {
// 			byte character = this.get();
// 			if ((character & 0xff) == 0) {
// 				break;
// 			} else {
// 				string += new String(new byte[] { character });
// 			}
// 		}
// 		
// 		return string;
// 	}
// 
// 	public String getString(int index, int length) {
// 		byte[] output = new byte[length];
// 		if (index > -1) {
// 			this.position(index);
// 		}
// 		this.byteBuffer.get(output);
// 		return new String(output);
// 	}
// 
// 	public void order(ByteOrder bo) {
// 		this.byteBuffer.order(bo);
// 	}
// 
// 	public int position() {
// 		return this.byteBuffer.position();
// 	}
// 	
// 	public void position(int newPosition) {
// 		this.byteBuffer.position(newPosition);
// 	}
// 
// 	public static SmartByteBuffer wrap(byte[] array) {
// 		SmartByteBuffer instance = new SmartByteBuffer();
// 		instance.byteBuffer = ByteBuffer.wrap(array);
// 		return instance;
// 	}
// }


import java.util.ArrayList;
import java.util.List;
import net.eiveo.utils.SmartByteArrayOutputStream;
import net.eiveo.utils.SmartByteBuffer;

	public void write(SmartByteArrayOutputStream outputStream, boolean isYoda) {
		outputStream.write("IACT");
		outputStream.sectionStart();

		outputStream.write((short) this.conditions.size());
		
		for (Condition condition : this.conditions) {
			condition.write(outputStream);
		}

		outputStream.write((short) this.actions.size());
		
		for (Action action : this.actions) {
			action.write(outputStream);
		}

		byte[] section = outputStream.sectionEnd();
		outputStream.write(isYoda ? section.length : 0);
		outputStream.write(section);
	}
	
	public static class Condition {
		private short unk1;
		private short unk2;
		private short unk3;
		private short unk4;
		private short unk5;
		private short unk6;
		private String string;
		

// Path: src/net/eiveo/utils/SmartByteArrayOutputStream.java
// public class SmartByteArrayOutputStream {
// 	private List<ByteArrayOutputStream> sections = new ArrayList<>();
// 	private ByteArrayOutputStream section;
// 	
// 	public SmartByteArrayOutputStream() {
// 		this.section = new ByteArrayOutputStream();
// 		this.sections.add(this.section);
// 	}
// 
// 	public void sectionStart() {
// 		this.section = new ByteArrayOutputStream();
// 		this.sections.add(this.section);
// 	}
// 	
// 	public byte[] sectionEnd() {
// 		byte[] result = this.section.toByteArray();
// 		sections.remove(sections.size() - 1);
// 		this.section = sections.get(sections.size() - 1);
// 		return result;
// 	}
// 
// 	public byte[] toByteArray() {
// 		return this.section.toByteArray();
// 	}
// 
// 	public void write(String string) {
// 		for (byte byteData : string.getBytes()) {
// 			this.section.write(byteData);
// 		}
// 	}
// 
// 	public void write(byte value) {
// 		this.section.write(value);
// 	}
// 
// 	public void write(byte[] value) {
// 		for (byte byteData : value) {
// 			this.section.write(byteData);
// 		}
// 	}
// 
// 	public void write(short value) {
// 		for (byte byteData : new byte[] {
// 	        (byte) value,
// 	        (byte)(value >> 8)
//         }) {
// 			this.section.write(byteData);
// 		}
// 	}
// 
// 	public void write(int value) {
// 		for (byte byteData : new byte[] {
// 	        (byte) value,
// 	        (byte)(value >> 8),
// 	        (byte)(value >> 16),
// 	        (byte)(value >> 24)
//         }) {
// 			this.section.write(byteData);
// 		}
// 	}
// }
// 
// Path: src/net/eiveo/utils/SmartByteBuffer.java
// public class SmartByteBuffer {
// 	private ByteBuffer byteBuffer;
// 
// 	public int capacity() {
// 		return this.byteBuffer.capacity();
// 	}
// 
// 	public byte get() {
// 		return this.byteBuffer.get();
// 	}
// 
// 	public void get(byte[] dst) {
// 		this.byteBuffer.get(dst);
// 	}
// 
// 	public int getInt() {
// 		return this.byteBuffer.getInt();
// 	}
// 
// 	public short getShort() {
// 		return this.byteBuffer.getShort();
// 	}
// 
// 	public String getString() {
// 		String string = "";
// 		
// 		while (true) {
// 			byte character = this.get();
// 			if ((character & 0xff) == 0) {
// 				break;
// 			} else {
// 				string += new String(new byte[] { character });
// 			}
// 		}
// 		
// 		return string;
// 	}
// 
// 	public String getString(int index, int length) {
// 		byte[] output = new byte[length];
// 		if (index > -1) {
// 			this.position(index);
// 		}
// 		this.byteBuffer.get(output);
// 		return new String(output);
// 	}
// 
// 	public void order(ByteOrder bo) {
// 		this.byteBuffer.order(bo);
// 	}
// 
// 	public int position() {
// 		return this.byteBuffer.position();
// 	}
// 	
// 	public void position(int newPosition) {
// 		this.byteBuffer.position(newPosition);
// 	}
// 
// 	public static SmartByteBuffer wrap(byte[] array) {
// 		SmartByteBuffer instance = new SmartByteBuffer();
// 		instance.byteBuffer = ByteBuffer.wrap(array);
// 		return instance;
// 	}
// }


// Path: src/net/eiveo/original/sections/todo/determine_values/IACT.java
import java.util.ArrayList;
import java.util.List;
import net.eiveo.utils.SmartByteArrayOutputStream;
import net.eiveo.utils.SmartByteBuffer;

	public void write(SmartByteArrayOutputStream outputStream, boolean isYoda) {
		outputStream.write("IACT");
		outputStream.sectionStart();

		outputStream.write((short) this.conditions.size());
		
		for (Condition condition : this.conditions) {
			condition.write(outputStream);
		}

		outputStream.write((short) this.actions.size());
		
		for (Action action : this.actions) {
			action.write(outputStream);
		}

		byte[] section = outputStream.sectionEnd();
		outputStream.write(isYoda ? section.length : 0);
		outputStream.write(section);
	}
	
	public static class Condition {
		private short unk1;
		private short unk2;
		private short unk3;
		private short unk4;
		private short unk5;
		private short unk6;
		private String string;
		

		public static Condition read(SmartByteBuffer data) {
