-optimizations !code/allocation/variable

# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase

-renamesourcefileattribute SourceFile
-keepattributes Exceptions,InnerClasses,Signature,*Annotation*,EnclosingMethod
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-keep class sun.misc.Unsafe { *; }
-keep class org.junit.** { *; }
-keep class junit.** { *; }

# Services and Content providers need to be discoverable
-keep public class * extends com.penthera.virtuososdk.database.impl.provider.VirtuosoSDKContentProvider
-keep public class com.penthera.virtuososdk.service.VirtuosoService
-keep class com.penthera.virtuososdk.service.VirtuosoService$** { *; }
-keep public class * extends com.penthera.virtuososdk.service.VirtuosoForegroundServiceHandler
-keep public class * extends com.penthera.virtuososdk.service.VirtuosoServiceStarter
-keep public class com.penthera.virtuososdk.service.VirtuosoClientHTTPService
-keep class com.penthera.virtuososdk.interfaces.toolkit.ServiceImpl { *; }

# Broadcast receivers for internal messaging need to be discoverable through reflection
-keep class com.penthera.virtuososdk.internal.impl.BroadcastReceiverMessageHandler { *; }
-keep class com.penthera.virtuososdk.internal.impl.BroadcastReceiverMessageHandler$** { *; }
-keep class com.penthera.virtuososdk.interfaces.toolkit.VirtuosoContentBox$** { *; }

-keepclassmembers class com.penthera.virtuososdk.internal.impl.BroadcastReceiverMessageHandler { *; }
-keepclassmembernames class com.penthera.virtuososdk.internal.impl.BroadcastReceiverMessageHandler { *; }

# License managers must be discoverable via reflection
-keep public class * extends com.penthera.virtuososdk.client.drm.LicenseManager
-keepnames public class com.penthera.virtuososdk.client.drm.castlabs.CastLabsLicenseManager

# Background processing manager must be discoverable via reflection
-keep public class * extends com.penthera.virtuososdk.client.IBackgroundProcessingManager
-keep public class * extends com.penthera.virtuososdk.client.IForegroundNotificationProvider
-keep public class * implements com.penthera.virtuososdk.client.IBackgroundProcessingManager
-keep public class * implements com.penthera.virtuososdk.client.IForegroundNotificationProvider

# Uses reflection
-keep class com.penthera.virtuososdk.utility.SerializableHttpCookie { *; }

# Uses parcelling
-keepnames class com.penthera.virtuososdk.interfaces.toolkit.VirtuosoSegmentedFile$*
-keepnames class com.penthera.virtuososdk.client.**

-keep class com.penthera.virtuososdk.client.push.ADMService {
    public *;
    protected *;
}

# Preserve all .class method names.
-keepclassmembernames class com.penthera.virtuososdk.** {
    java.lang.Class class$(java.lang.String);
    java.lang.Class class$(java.lang.String, boolean);
}

# Explicitly preserve all serialization members.
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

-keepnames class com.penthera.virtuososdk.** implements android.os.Parcelable
-keepnames class com.penthera.virtuososdk.** implements java.io.Serializable

# Explicitly preserve all parcellables members, passed via bundles
-keepclassmembers class * implements android.os.Parcelable {
    static ** CREATOR;
}

# Preserve the special static methods that are required in all enumeration classes.
-keepclassmembers,allowoptimization enum com.penthera.virtuososdk.** {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}


-if class com.penthera.virtuososdk.backplane.data.AssetDownloadsPerDevice
-keepnames class com.penthera.virtuososdk.backplane.data.AssetDownloadsPerDevice
-if class com.penthera.virtuososdk.backplane.data.AssetDownloadsPerDevice
-keep class com.penthera.virtuososdk.backplane.data.AssetDownloadsPerDeviceJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class com.penthera.virtuososdk.backplane.data.DownloadStartResponse
-keepnames class com.penthera.virtuososdk.backplane.data.DownloadStartResponse
-if class com.penthera.virtuososdk.backplane.data.DownloadStartResponse
-keep class com.penthera.virtuososdk.backplane.data.DownloadStartResponseJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class com.penthera.virtuososdk.backplane.data.DownloadsPerDevice
-keepnames class com.penthera.virtuososdk.backplane.data.DownloadsPerDevice
-if class com.penthera.virtuososdk.backplane.data.DownloadsPerDevice
-keep class com.penthera.virtuososdk.backplane.data.DownloadsPerDeviceJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class com.penthera.virtuososdk.backplane.internal.DownloadEndRequestPayload
-keepnames class com.penthera.virtuososdk.backplane.internal.DownloadEndRequestPayload
-if class com.penthera.virtuososdk.backplane.internal.DownloadEndRequestPayload
-keep class com.penthera.virtuososdk.backplane.internal.DownloadEndRequestPayloadJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class com.penthera.virtuososdk.backplane.internal.DownloadEndRequestPayload
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class com.penthera.virtuososdk.backplane.internal.DownloadEndRequestPayload
-keepclassmembers class com.penthera.virtuososdk.backplane.internal.DownloadEndRequestPayload {
    public synthetic <init>(java.util.List,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-if class com.penthera.virtuososdk.backplane.data.AssetData
-keepnames class com.penthera.virtuososdk.backplane.data.AssetData
-if class com.penthera.virtuososdk.backplane.data.AssetData
-keep class com.penthera.virtuososdk.backplane.data.AssetDataJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class com.penthera.virtuososdk.backplane.data.DownloadRemovedData
-keepnames class com.penthera.virtuososdk.backplane.data.DownloadRemovedData
-if class com.penthera.virtuososdk.backplane.data.DownloadRemovedData
-keep class com.penthera.virtuososdk.backplane.data.DownloadRemovedDataJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class com.penthera.virtuososdk.backplane.internal.AssetsRequestPayload
-keepnames class com.penthera.virtuososdk.backplane.internal.AssetsRequestPayload
-if class com.penthera.virtuososdk.backplane.internal.AssetsRequestPayload
-keep class com.penthera.virtuososdk.backplane.internal.AssetsRequestPayloadJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class com.penthera.virtuososdk.backplane.internal.AssetsRequestPayload
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class com.penthera.virtuososdk.backplane.internal.AssetsRequestPayload
-keepclassmembers class com.penthera.virtuososdk.backplane.internal.AssetsRequestPayload {
    public synthetic <init>(java.util.List,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-if class com.penthera.virtuososdk.backplane.data.AssetDownloadInfoData
-keepnames class com.penthera.virtuososdk.backplane.data.AssetDownloadInfoData
-if class com.penthera.virtuososdk.backplane.data.AssetDownloadInfoData
-keep class com.penthera.virtuososdk.backplane.data.AssetDownloadInfoDataJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class com.penthera.virtuososdk.backplane.data.DownloadEndData
-keepnames class com.penthera.virtuososdk.backplane.data.DownloadEndData
-if class com.penthera.virtuososdk.backplane.data.DownloadEndData
-keep class com.penthera.virtuososdk.backplane.data.DownloadEndDataJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class com.penthera.virtuososdk.backplane.internal.DownloadRemovedRequestPayload
-keepnames class com.penthera.virtuososdk.backplane.internal.DownloadRemovedRequestPayload
-if class com.penthera.virtuososdk.backplane.internal.DownloadRemovedRequestPayload
-keep class com.penthera.virtuososdk.backplane.internal.DownloadRemovedRequestPayloadJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class com.penthera.virtuososdk.backplane.internal.DownloadRemovedRequestPayload
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class com.penthera.virtuososdk.backplane.internal.DownloadRemovedRequestPayload
-keepclassmembers class com.penthera.virtuososdk.backplane.internal.DownloadRemovedRequestPayload {
    public synthetic <init>(java.util.List,java.util.List,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-if class com.penthera.virtuososdk.backplane.internal.DownloadStartRequestPayload
-keepnames class com.penthera.virtuososdk.backplane.internal.DownloadStartRequestPayload
-if class com.penthera.virtuososdk.backplane.internal.DownloadStartRequestPayload
-keep class com.penthera.virtuososdk.backplane.internal.DownloadStartRequestPayloadJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class com.penthera.virtuososdk.backplane.internal.DownloadStartRequestPayload
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class com.penthera.virtuososdk.backplane.internal.DownloadStartRequestPayload
-keepclassmembers class com.penthera.virtuososdk.backplane.internal.DownloadStartRequestPayload {
    public synthetic <init>(java.lang.String,java.lang.String,int,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-if class com.penthera.virtuososdk.backplane.data.DownloadInfoData
-keepnames class com.penthera.virtuososdk.backplane.data.DownloadInfoData
-if class com.penthera.virtuososdk.backplane.data.DownloadInfoData
-keep class com.penthera.virtuososdk.backplane.data.DownloadInfoDataJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}


