// Path: op1/src/main/java/com/op1/util/Check.java
// public class Check {
// 
//     public static <T> T notNull(T t, String message) {
//         if (t == null) {
//             throw new IllegalArgumentException(message);
//         }
//         return t;
//     }
// 
//     public static void that(boolean b, String message) {
//         if (!b) {
//             throw new IllegalArgumentException(message);
//         }
//     }
// 
//     public static void state(boolean b, String message) {
//         if (!b) {
//             throw new IllegalStateException(message);
//         }
//     }
// }


import com.op1.util.Check;
import java.util.Arrays;
package com.op1.iff.types;



public abstract class DataType {

    protected final byte[] bytes;

    public DataType(byte[] bytes) {
        this.bytes = Arrays.copyOf(bytes, bytes.length);
    }

    public DataType(byte[] bytes, int expectedNumBytes) {
// Path: op1/src/main/java/com/op1/util/Check.java
// public class Check {
// 
//     public static <T> T notNull(T t, String message) {
//         if (t == null) {
//             throw new IllegalArgumentException(message);
//         }
//         return t;
//     }
// 
//     public static void that(boolean b, String message) {
//         if (!b) {
//             throw new IllegalArgumentException(message);
//         }
//     }
// 
//     public static void state(boolean b, String message) {
//         if (!b) {
//             throw new IllegalStateException(message);
//         }
//     }
// }


// Path: op1/src/main/java/com/op1/iff/types/DataType.java
import com.op1.util.Check;
import java.util.Arrays;

package com.op1.iff.types;



public abstract class DataType {

    protected final byte[] bytes;

    public DataType(byte[] bytes) {
        this.bytes = Arrays.copyOf(bytes, bytes.length);
    }

    public DataType(byte[] bytes, int expectedNumBytes) {
        Check.that(bytes.length == expectedNumBytes, "Unexpected number of bytes: " + bytes.length);