// Path: bletia-core/src/main/java/info/izumin/android/bletia/core/ResolveStrategy.java
// public interface ResolveStrategy<T, E extends Throwable, R> {
//     void resolve(T value);
//     void reject(E throwable);
//     R getResolver();
// }
// 
// Path: bletia-core/src/main/java/info/izumin/android/bletia/core/wrapper/BluetoothGattWrapper.java
// public class BluetoothGattWrapper {
//     private final BluetoothGatt mBluetoothGatt;
// 
//     public BluetoothGattWrapper(BluetoothGatt bluetoothGatt) {
//         mBluetoothGatt = bluetoothGatt;
//     }
// 
//     public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
//         return mBluetoothGatt.getDevicesMatchingConnectionStates(states);
//     }
// 
//     public List<BluetoothDevice> getConnectedDevices() {
//         return mBluetoothGatt.getConnectedDevices();
//     }
// 
//     public int getConnectionState(BluetoothDevice device) {
//         return mBluetoothGatt.getConnectionState(device);
//     }
// 
//     public boolean requestConnectionPriority(int connectionPriority) {
//         return mBluetoothGatt.requestConnectionPriority(connectionPriority);
//     }
// 
//     public boolean requestMtu(int mtu) {
//         return mBluetoothGatt.requestMtu(mtu);
//     }
// 
//     public boolean readRemoteRssi() {
//         return mBluetoothGatt.readRemoteRssi();
//     }
// 
//     public boolean setCharacteristicNotification(BluetoothGattCharacteristic characteristic, boolean enable) {
//         return mBluetoothGatt.setCharacteristicNotification(characteristic, enable);
//     }
// 
//     @Deprecated
//     public void abortReliableWrite(BluetoothDevice mDevice) {
//         mBluetoothGatt.abortReliableWrite(mDevice);
//     }
// 
//     public void abortReliableWrite() {
//         mBluetoothGatt.abortReliableWrite();
//     }
// 
//     public boolean executeReliableWrite() {
//         return mBluetoothGatt.executeReliableWrite();
//     }
// 
//     public boolean beginReliableWrite() {
//         return mBluetoothGatt.beginReliableWrite();
//     }
// 
//     public boolean writeDescriptor(BluetoothGattDescriptor descriptor) {
//         return mBluetoothGatt.writeDescriptor(descriptor);
//     }
// 
//     public boolean readDescriptor(BluetoothGattDescriptor descriptor) {
//         return mBluetoothGatt.readDescriptor(descriptor);
//     }
// 
//     public boolean writeCharacteristic(BluetoothGattCharacteristic characteristic) {
//         return mBluetoothGatt.writeCharacteristic(characteristic);
//     }
// 
//     public boolean readCharacteristic(BluetoothGattCharacteristic characteristic) {
//         return mBluetoothGatt.readCharacteristic(characteristic);
//     }
// 
//     public BluetoothGattService getService(UUID uuid) {
//         return mBluetoothGatt.getService(uuid);
//     }
// 
//     public List<BluetoothGattService> getServices() {
//         return mBluetoothGatt.getServices();
//     }
// 
//     public boolean discoverServices() {
//         return mBluetoothGatt.discoverServices();
//     }
// 
//     public BluetoothDevice getDevice() {
//         return mBluetoothGatt.getDevice();
//     }
// 
//     public boolean connect() {
//         return mBluetoothGatt.connect();
//     }
// 
//     public void disconnect() {
//         mBluetoothGatt.disconnect();
//     }
// 
//     public void close() {
//         mBluetoothGatt.close();
//     }
// }


import android.os.Bundle;
import android.os.Message;
import java.io.Serializable;
import info.izumin.android.bletia.core.ResolveStrategy;
import info.izumin.android.bletia.core.wrapper.BluetoothGattWrapper;
        }

        public int getCode() {
            return mCode;
        }

        public static Type valueOf(int code) {
            for (Type type : values()) {
                if (type.getCode() == code) { return type; }
            }
            throw new IllegalArgumentException();
        }
    }

    public static final String KEY_IDENTITY = "key_identity";

    private final I mIdentity;
    private final Type mType;
    private final ResolveStrategy<T, E, R> mResolveStrategy;

    public AbstractAction(I identity, Type type, ResolveStrategy<T, E, R> resolveStrategy) {
        mIdentity = identity;
        mType = type;
        mResolveStrategy = resolveStrategy;
    }

    public final I getIdentity() {
        return mIdentity;
    }

// Path: bletia-core/src/main/java/info/izumin/android/bletia/core/ResolveStrategy.java
// public interface ResolveStrategy<T, E extends Throwable, R> {
//     void resolve(T value);
//     void reject(E throwable);
//     R getResolver();
// }
// 
// Path: bletia-core/src/main/java/info/izumin/android/bletia/core/wrapper/BluetoothGattWrapper.java
// public class BluetoothGattWrapper {
//     private final BluetoothGatt mBluetoothGatt;
// 
//     public BluetoothGattWrapper(BluetoothGatt bluetoothGatt) {
//         mBluetoothGatt = bluetoothGatt;
//     }
// 
//     public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
//         return mBluetoothGatt.getDevicesMatchingConnectionStates(states);
//     }
// 
//     public List<BluetoothDevice> getConnectedDevices() {
//         return mBluetoothGatt.getConnectedDevices();
//     }
// 
//     public int getConnectionState(BluetoothDevice device) {
//         return mBluetoothGatt.getConnectionState(device);
//     }
// 
//     public boolean requestConnectionPriority(int connectionPriority) {
//         return mBluetoothGatt.requestConnectionPriority(connectionPriority);
//     }
// 
//     public boolean requestMtu(int mtu) {
//         return mBluetoothGatt.requestMtu(mtu);
//     }
// 
//     public boolean readRemoteRssi() {
//         return mBluetoothGatt.readRemoteRssi();
//     }
// 
//     public boolean setCharacteristicNotification(BluetoothGattCharacteristic characteristic, boolean enable) {
//         return mBluetoothGatt.setCharacteristicNotification(characteristic, enable);
//     }
// 
//     @Deprecated
//     public void abortReliableWrite(BluetoothDevice mDevice) {
//         mBluetoothGatt.abortReliableWrite(mDevice);
//     }
// 
//     public void abortReliableWrite() {
//         mBluetoothGatt.abortReliableWrite();
//     }
// 
//     public boolean executeReliableWrite() {
//         return mBluetoothGatt.executeReliableWrite();
//     }
// 
//     public boolean beginReliableWrite() {
//         return mBluetoothGatt.beginReliableWrite();
//     }
// 
//     public boolean writeDescriptor(BluetoothGattDescriptor descriptor) {
//         return mBluetoothGatt.writeDescriptor(descriptor);
//     }
// 
//     public boolean readDescriptor(BluetoothGattDescriptor descriptor) {
//         return mBluetoothGatt.readDescriptor(descriptor);
//     }
// 
//     public boolean writeCharacteristic(BluetoothGattCharacteristic characteristic) {
//         return mBluetoothGatt.writeCharacteristic(characteristic);
//     }
// 
//     public boolean readCharacteristic(BluetoothGattCharacteristic characteristic) {
//         return mBluetoothGatt.readCharacteristic(characteristic);
//     }
// 
//     public BluetoothGattService getService(UUID uuid) {
//         return mBluetoothGatt.getService(uuid);
//     }
// 
//     public List<BluetoothGattService> getServices() {
//         return mBluetoothGatt.getServices();
//     }
// 
//     public boolean discoverServices() {
//         return mBluetoothGatt.discoverServices();
//     }
// 
//     public BluetoothDevice getDevice() {
//         return mBluetoothGatt.getDevice();
//     }
// 
//     public boolean connect() {
//         return mBluetoothGatt.connect();
//     }
// 
//     public void disconnect() {
//         mBluetoothGatt.disconnect();
//     }
// 
//     public void close() {
//         mBluetoothGatt.close();
//     }
// }


// Path: bletia-core/src/main/java/info/izumin/android/bletia/core/action/AbstractAction.java
import android.os.Bundle;
import android.os.Message;
import java.io.Serializable;
import info.izumin.android.bletia.core.ResolveStrategy;
import info.izumin.android.bletia.core.wrapper.BluetoothGattWrapper;

        }

        public int getCode() {
            return mCode;
        }

        public static Type valueOf(int code) {
            for (Type type : values()) {
                if (type.getCode() == code) { return type; }
            }
            throw new IllegalArgumentException();
        }
    }

    public static final String KEY_IDENTITY = "key_identity";

    private final I mIdentity;
    private final Type mType;
    private final ResolveStrategy<T, E, R> mResolveStrategy;

    public AbstractAction(I identity, Type type, ResolveStrategy<T, E, R> resolveStrategy) {
        mIdentity = identity;
        mType = type;
        mResolveStrategy = resolveStrategy;
    }

    public final I getIdentity() {
        return mIdentity;
    }

    public final Type getType() {